EQSTLab/CVE-2026-33017

GitHub: EQSTLab/CVE-2026-33017

针对 Langflow 1.8.2 及更早版本中公开流程构建端点的未授权远程代码执行漏洞(CVE-2026-33017)的 PoC 与深度技术分析。

Stars: 1 | Forks: 0

# CVE-2026-33017 Langflow RCE ## 概述 CVE-2026-33017 是一个存在于 Langflow 公开流程构建端点 `POST /api/v1/build_public_tmp/{flow_id}/flow` 的**远程代码执行(RCE)**漏洞。Langflow 是一个开源平台,支持可视化构建 LLM 应用和 AI 工作流。 Langflow 的公开流程(Public flow)旨在通过链接等方式供其他用户调用和使用,因此被设计为无需身份验证即可将流程准备至可执行状态。此时,构建端点负责读取构成流程的节点、连接关系和配置值,创建内部执行图,并使各功能模块准备好实际运行。 问题在于,该端点不仅使用服务器上存储的现有公开流程信息,还接收了请求体中包含的 `data` 值。该 `data` 包含了构成流程的节点列表、节点之间的连接以及每个节点的详细配置,实质上囊括了定义要执行何种流程的完整结构。因此,攻击者仅需一次请求,就能将服务器原本保存的正常流程替换为自己篡改过的流程结构。 在此过程中,自定义组件成为了问题的核心。在 Langflow 中,组件负责输入、模型调用和输出处理等单一功能,而自定义组件是允许用户使用 Python 代码直接定义的可扩展模块。攻击者可以在篡改的 `data` 中嵌入包含恶意 Python 代码的自定义组件,服务器会将其作为普通流程组件进行处理。结果,这些 Python 代码通过内部执行路径在服务器上实际运行,从而导致了远程代码执行。 ## 影响版本 - **受影响版本** Langflow **1.8.2 及更早版本** - **修复版本** Langflow **1.9.0 及更高版本** ## 漏洞验证 **在 Langflow 1.8.1 环境下复现 CVE-2026-33017。** ### 1. 确认公开流程 ID 攻击者首先识别目标公开流程的 `flow_id`,以发动攻击。 image - **图 2 — PoC 执行界面** 展示了针对公开流程 ID 执行 PoC 的过程。攻击者在请求体中包含恶意的 `data`,诱使服务器构建攻击者篡改的流程定义,而不是数据库中存储的流程。 - **图 3 — 从服务器日志确认命令执行** 如果服务器日志输出了诸如 `uid=0(root) gid=0(root)` 的结果,则可以确认即使在构建未能正常完成的情况下,命令也已在图编译阶段执行。换言之,此漏洞的核心并非正常流程执行,而是构建过程中的代码执行。 - **图 4 — 修补后重试结果** 修补后,公开端点不再接收外部 `data` 来更改流程定义,因此相同的请求无法再触发任意代码执行。 ## 分析 受影响版本的 `build_public_tmp` 是一个公开流程构建端点,但却能够接收请求体中的 `data`。在这种架构下,攻击者发送的 `data` 会直接进入构建逻辑,导致其中的自定义组件代码被执行。 修补后,该端点不再接收 `data`,攻击者无法再通过请求体注入流程定义本身。 image ## 参考文献 - GitHub 安全公告:GHSA-vwmf-pq79-vjvx - NVD:CVE-2026-33017 - 修补提交:73b6612e3ef25fdae0a752d75b0fabd47328d4f0
标签:0day漏洞, AI安全, AI工作流, API安全, C2, Chat Copilot, CISA项目, CVE-2026-33017, JSON输出, Langflow, OPA, PoC, RCE, Web安全, 代码执行, 开源平台, 数据展示, 暴力破解, 未授权访问, 漏洞分析, 红队, 编程工具, 网络安全, 自定义组件, 蓝队分析, 路径探测, 远程代码执行, 逆向工具, 隐私保护, 靶场