
CVE-2026-33017 का पता लगाने के लिए Nuclei टेम्पलेट, जो Langflow ≤ 1.8.2 में एक अप्रमाणित रिमोट कोड निष्पादन भेद्यता है। HTTP प्रतिक्रिया विश्लेषण के माध्यम से कमजोर और पैच किए गए बिल्ड के बीच अंतर करने के लिए गैर-विनाशकारी पूर्व-जांच करता है।
Nuclei टेम्पलेट जो CVE-2026-33017 का पता लगाता है — Langflow ≤ 1.8.2 में एक अप्रमाणित रिमोट-कोड-निष्पादन भेद्यता, जो सार्वजनिक flow-build एंडपॉइंट के माध्यम से पहुंच योग्य है:
POST /api/v1/build_public_tmp/{flow_id}/flow
कमजोर हैंडलर एक हमलावर-नियंत्रित data फ्लो ग्राफ को स्वीकार करता है और ग्राफ बिल्ड के दौरान data.nodes[].data.node.template.code.value को बिना सैंडबॉक्सिंग के सीधे Python exec() में पास करता है। फिक्स (≥ 1.9.0) हैंडलर सिग्नेचर से data पैरामीटर को हटा देता है, इसलिए एक पैच किया गया बिल्ड उसी अनुरोध को FastAPI के वैलिडेशन लेयर पर HTTP 422 के साथ अस्वीकार कर देता है।
टेम्पलेट गैर-विनाशकारी है। यह एक शून्य-UUID फ्लो आईडी के विरुद्ध एक निष्क्रिय पेलोड भेजता है, इसलिए यह कमजोर होस्ट पर भी exec() तक नहीं पहुंच सकता। यह केवल HTTP प्रतिक्रिया हस्ताक्षर द्वारा कमजोर हैंडलर को पैच किए गए हैंडलर से अलग करता है।
| चरण | अनुरोध | यह आपको क्या बताता है |
|---|---|---|
| 1 | GET /api/v1/version |
चरण 2 के लिए रूटिंग:
एक वास्तविक RCE पुष्टि के लिए अभी भी (a) लक्ष्य पर एक वास्तविक सार्वजनिक फ्लो UUID और (b) एक आउट-ऑफ-बैंड कॉलबैक (DNS/HTTP) की आवश्यकता है। वह कदम जानबूझकर यहां शामिल नहीं किया गया है — यह टेम्पलेट सुरक्षित पूर्व-जांच है जो तय करता है कि सक्रिय एक्सप्लॉइट चलाना समझ में आता है या नहीं।
एकल होस्ट:
nuclei -t CVE-2026-33017.yaml -u https://target.example.com
सूची से बल्क स्कैन:
nuclei -t CVE-2026-33017.yaml -l targets.txt -rl 20 -c 10
डीबग आउटपुट के साथ (कच्चे अनुरोध/प्रतिक्रियाएं देखें):
nuclei -t CVE-2026-33017.yaml -u https://target.example.com -debug-req -debug-resp
इसे चलाने से पहले टेम्पलेट को स्थानीय रूप से मान्य करें:
nuclei -validate -t CVE-2026-33017.yaml
कमजोर लक्ष्य:
[CVE-2026-33017] [http] [critical] https://target.example.com [vulnerable-flow-not-found] ["1.8.2","base"]
पैच किया गया लक्ष्य — कोई खोज उत्सर्जित नहीं (422 प्रतिक्रिया किसी भी नियम से मेल नहीं खाती)।
Langflow होस्ट के लिए सामान्य खोज क्वेरी (केवल उन संपत्तियों के विरुद्ध उपयोग करें जिनका परीक्षण करने के लिए आप अधिकृत हैं):
http.title:"Langflow"app="Langflow"intitle:"Langflow" inurl:"/flows"AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hकमजोर बिल्ड में सार्वजनिक हैंडलर मोटे तौर पर इस प्रकार घोषित किया जाता है:
@router.post("/build_public_tmp/{flow_id}/flow")
async def build_public_flow(flow_id: UUID, data: FlowDataRequest | None = None, ...):
...
await verify_public_flow_and_get_user(flow_id, ...)
...
# data.nodes[].data.node.template.code.value exec() तक पहुंचता है
# Component बिल्ड पथ में
data हमलावर-नियंत्रित है। पैच किए गए हैंडलर पैरामीटर को पूरी तरह से हटा देता है और data=None को बाध्य करता है, यही कारण है कि पैच किए गए बिल्ड पर data बॉडी फ़ील्ड वाला अनुरोध 422 के साथ अस्वीकार कर दिया जाता है।
/api/v1/build_public_tmp/ को ब्लॉक करें।LANGFLOW_AUTO_LOGIN=False सेट करें, सुपरयूज़र क्रेडेंशियल कॉन्फ़िगर करें, और LANGFLOW_SECRET_KEY को रोटेट करें।access_type=PUBLIC फ्लो वे हैं जिन्हें हमलावर URL में लक्षित करेगा।यह टेम्पलेट केवल रक्षात्मक सुरक्षा और अधिकृत परीक्षण के लिए प्रकाशित किया गया है। इसे उन सिस्टमों के विरुद्ध चलाना जिनके आप मालिक नहीं हैं या जिनके परीक्षण करने की आपके पास स्पष्ट लिखित अनुमति नहीं है, अधिकांश न्यायक्षेत्रों में अवैध है और प्लेटफ़ॉर्म की सेवा की शर्तों का उल्लंघन करता है।
इस टेम्पलेट का उपयोग करके आप सहमत हैं कि:
lopseg — https://github.com/lopseg
पुल अनुरोध और मुद्दों का स्वागत है।
MIT
| पुष्टि करता है कि लक्ष्य Langflow है और बिल्ड संस्करण निकालता है। |
| 2 | POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000000/flow एक बॉडी के साथ जिसमें data फ़ील्ड और एक निष्क्रिय template.code.value होता है | नीचे रूटिंग निर्णय। |
| स्थिति | बॉडी में शामिल | निर्णय |
|---|
404 | flow / public | कमजोर — हैंडलर ने data स्वीकार किया, फिर लुकअप विफल हुआ क्योंकि UUID नकली है। |
200 | job_id / build / task | कमजोर — हैंडलर ने data स्वीकार किया और बिल्ड पथ में प्रवेश किया। |
5xx | exec / Component / traceback | कमजोर — हैंडलर विफल होने से पहले exec कोड पथ तक पहुंच गया। |
422 | Field required / extra / data | पैच किया गया — हैंडलर सिग्नेचर अब data स्वीकार नहीं करता। |