rootdirective-sec/CVE-2026-33017-Lab
GitHub: rootdirective-sec/CVE-2026-33017-Lab
CVE-2026-33017 实验环境,用于复现 Langflow 平台未授权远程代码执行漏洞,提供基于真实上游构件的 Docker 环境与最小化 PoC 验证脚本。
Stars: 0 | Forks: 0
# CVE-2026-33017 — Langflow 未授权 RCE 实验环境
## 执行摘要
CVE-2026-33017 是 Langflow 中的一个 **未授权远程代码执行 (RCE)** 漏洞,其中一个公开构建端点接受攻击者控制的流数据,从而允许在服务器上执行自定义组件代码。
在此实验环境中,验证流程如下:
1. 通过自动登录流程获取访问令牌
2. 创建一个新的 `PUBLIC` 流
3. 向公开构建端点发送攻击者控制的组件代码
4. 接收 `job_id`
5. 通过构建事件 API 轮询结果
6. 直接从组件输出读取证明对象
证明直接通过 Langflow API 事件机制检索,使得结果可以通过系统接口本身进行观察。
## 本仓库范围
本文档展示了一个 **仅含漏洞的实验环境**。
目前,`docker compose` 仅包含一个服务:`vuln`,因为该项目遵循 **仅限真实构件** 的方法,并避免使用不基于官方修复构件的修补环境。
## 本实验中已验证的行为
本实验中已验证以下行为:
* 一个易受攻击的 Langflow 实例运行在 `http://localhost:7861`
* 版本端点返回 `1.8.1`
* 可以创建公开流
* `build_public_tmp` 返回一个 `job_id`
* PoC 可以持续轮询事件
* 证明对象通过 API 返回
* 攻击者控制的代码在 Langflow runtime 内执行
示例证明对象:
```
{
"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_output`
* `whoami`
* `hostname`
* `cwd`
* `python_version`
以上信息表明攻击者控制的代码确实在服务器端被执行了。
## 仓库结构
```
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
```
## 环境要求
* Linux 或 macOS
* Docker Desktop 或 Docker Engine
* Docker Compose v2
* Python 3
## 服务概述
### 漏洞
* 易受攻击的 Langflow 实例
* 绑定端口:`7861 -> 7860`
* 用于在 localhost 上复现 CVE-2026-33017
## 漏洞原理
此漏洞的存在是因为 Langflow 的公开构建端点接受用户提供的流定义,即使该端点已专为公开流设计。当攻击者提交包含自定义组件代码的节点定义时,系统会将该代码传递到流构建路径中,最终导致在服务器上执行代码。
本项目中的 PoC 使用一个自定义组件,该组件在其输出中返回证明对象,以证明攻击者控制的代码确实被执行。
## PoC 设计
本项目中的 PoC 被设计为 **最小危害**,并侧重于通过 API 获得清晰可见的证明。其工作流程如下:
1. 等待 Langflow 准备就绪
2. 调用自动登录端点以获取令牌
3. 创建一个 `PUBLIC` 流
4. 向公开构建端点发送自定义组件代码
5. 接收 `job_id`
6. 轮询构建事件 API
7. 从事件 payload 中解析证明对象
此 PoC 不涉及:
* 打开 shell
* 建立反向连接
* 建立持久化
* 窃取机密
* 使用 webshell
## 运行实验环境
### 1) 启动易受攻击的服务
```
docker compose up -d --build
```
### 2) 验证版本端点
```
curl -i http://localhost:7861/api/v1/version
```
### 3) 运行 PoC
```
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 :
HTTP : 200
Job ID :
Canary : lf33017-xxxxxxxx
Events : artifacts/vuln/events-.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": "",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Vulnerable behavior observed
```
文件 `artifacts/vuln/events-.ndjson` 存储原始事件数据,用于额外调试。
## 当前 PoC 证明了什么
此 PoC 演示了:
* 攻击者可以调用公开构建流
* 攻击者控制的代码在 Langflow 服务器上执行
* 执行上下文通过 API 返回
* 真实影响是 **未授权代码执行**
此 PoC 旨在演示漏洞的存在,而非持久化或高级后渗透操作,并将影响保持在验证漏洞所需的最低水平。
## 影响
基于此实验环境,已证明的影响如下:
* 未授权攻击者可以在 Langflow 服务器上执行 Python 代码
* 攻击者可以访问进程的 runtime 上下文
* 攻击者可以执行一次性系统命令
* 攻击者可以访问工作目录和 runtime 元数据
## 为什么没有修复版服务
根据设计,本仓库不包含修复版服务。
其范围仅限于在真实的上游构件上复现易受攻击的行为。只有当供应商或上游项目提供了清晰可验证的官方修复构件时,才会添加修复版。
因此,本仓库刻意避免:
* 构建本地镜像以模拟修复版本,
* 修改镜像源以模仿补丁行为,或
* 添加辅助脚本,在没有真实上游修复构件的情况下制造易受攻击与已修复对比的假象。
这保持了实验环境范围狭窄且技术上诚实。该仓库不展示人工搭建的并排环境,而是专注于三件事:
* 可复现的易受攻击行为,
* 透明的概念验证,以及
* 与真实上游构件保持一致的文档。
在实践中,这使得该仓库最适合用于:
* 漏洞复现,
* 技术分析和报告支持,以及
* 作品集展示,其中可复现性和可信度比合成修补环境更重要。
## 清理
```
docker compose down -v
```
## 安全提示
此实验环境设计仅用于 localhost 测试。
使用要求:
* 仅在你自己的环境中使用
* 不要将 PoC 修改为 webshell 或持久化机制
* 不要在仓库中包含真实令牌或真实机密
* 如果将来添加修复版,必须仅使用官方修复构件
标签:API安全, CISA项目, Code Execution, CVE-2026-33017, Docker, JSON输出, Langflow, Maven, OPA, PoC, Python, RCE, 人工智能安全, 低代码安全, 合规性, 安全漏洞, 安全防御评估, 开放策略代理, 无后门, 暴力破解, 未授权访问, 漏洞复现, 漏洞验证, 版权保护, 组件注入, 编程工具, 请求拦截, 远程代码执行, 逆向工具, 靶场