CVE-2026-33017 是 Langflow 中的一个**未认证远程代码执行(RCE)**漏洞,其公开构建端点接受攻击者控制的流程数据,允许自定义组件代码在服务器上执行。
在本实验环境中,验证流程如下:
PUBLIC 流程job_id证明对象直接通过 Langflow API 事件机制获取,使结果可以通过系统界面本身进行观察。
本文档展示了一个仅含漏洞的实验环境。
目前,docker compose 仅包含一个服务:vuln,因为本项目遵循仅使用真实制品的方法,并避免使用非基于官方修复制品的修补环境。
以下行为已在本实验环境中得到验证:
http://localhost:78611.8.1build_public_tmp 返回一个 job_id示例证明对象:
{
"canary": "lf33017-c14fc1c9",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "155aa3fd5e2a",
"cwd": "/app",
"python_version": "3.12.12"
}
关键证据包括:
id_outputwhoamihostnamecwdpython_version以上信息表明攻击者控制的代码确实在服务器端被执行。
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
7861 -> 7860该漏洞的存在是因为 Langflow 的公开构建端点接受用户提供的流程定义,尽管该端点本身已设计用于公开流程。当攻击者提交包含自定义组件代码的节点定义时,系统会将该代码传入流程构建路径,最终导致代码在服务器上执行。
本项目中的 PoC 使用一个自定义组件,在其输出中返回一个证明对象,以证明攻击者控制的代码确实被执行。
本项目中的 PoC 被设计为最小危害,并专注于通过 API 提供清晰可观察的证明。其工作流程如下:
PUBLIC 流程job_id此 PoC 不包含:
docker compose up -d --build
curl -i http://localhost:7861/api/v1/version
python3 poc/poc.py --base-url http://localhost:7861 --artifact-dir ./artifacts/vuln
当 PoC 成功时,输出将如下所示:
[+] http://localhost:7861 ready (version=1.8.1)
=== TARGET: vuln ===
Base URL : http://localhost:7861
Version : 1.8.1
Flow ID : <uuid>
HTTP : 200
Job ID : <uuid>
Canary : lf33017-xxxxxxxx
Events : artifacts/vuln/events-<job_id>.ndjson
Polls : 2
[+] Proof observed through the Langflow API events endpoint:
{
"canary": "lf33017-xxxxxxxx",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "<container-hostname>",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Vulnerable behavior observed
文件 artifacts/vuln/events-<job_id>.ndjson 存储原始事件数据,用于额外的调试。
此 PoC 证明了:
此 PoC 不旨在演示持久化或高级后渗透利用,并将影响保持在验证漏洞所需的最低水平。
基于本实验环境,所展示的影响包括:
本仓库按设计不包含修补后的服务。
其范围仅限于在真实的上游制品上复现漏洞行为。只有在供应商或上游项目提供明确可验证的官方修复制品时,才会添加修补侧。
因此,本仓库刻意避免:
这使实验环境保持范围狭窄且在技术上诚实。本仓库不呈现人为的并排设置,而是专注于三件事:
实际上,这使得本仓库最适合用于:
docker compose down -v
本实验环境仅设计用于 localhost 测试。
使用要求: