文章总结: 本文拆解LangflowCVE-2026-9198利用链:默认开启的auto_login接口向任意网络调用者发放超管token,配合validate/code接口在函数定义时执行代码,两条HTTP请求即可远程代码执行,影响1.0.0至1.10.0全版本,CVSS9.8,已进KEV目录。文章梳理了该产品15个月内6次因同一exec()根因进入KEV的时间线,指出架构层面安全模型缺陷,并给出版本排查、日志两段式特征检测、进程树监控等可落地自查规则,建议按迟早被打穿做预案并轮换凭据。 综合评分: 88 文章分类: 漏洞分析,WEB安全,应急响应,安全运营
两条HTTP请求打穿AI工作流引擎:Langflow CVE-2026-9198利用链拆解,这已是它第六次进KEV
cwbird cwbird
bird网络安全
2026年8月21日 11:00 四川
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
8 月 4 日,CISA 把 CVE-2026-9198 加进 KEV 目录(Known Exploited Vulnerabilities,已知在野利用漏洞目录),给联邦机构的修复期限只有 3 天,8 月 7 日截止(来源:CISA KEV 数据,2026 年 8 月下载)。漏洞影响 IBM Langflow OSS 1.0.0 到 1.10.0 全版本,CVSS 9.8,向量 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H。IBM 在 7 月 2 日的安全公告 7278927 里写得干脆:无任何临时缓解措施,唯一出路是升级 1.10.1。BleepingComputer 在 8 月 5 日报道 CISA 已确认在野利用。
Langflow 是一个低代码 AI 工作流引擎,用户在画布上拖节点拼 Agent 流水线,节点可以写成自定义 Python 组件。这个产品定位决定了它的攻击面:服务器进程必须执行用户提交的代码。CVE-2026-9198 的全部技术内容,就是攻击者如何不碰登录框、直接走到那行 exec()面前。
第一步:auto_login 接口把超管 token 发给任何敲门的人
GET /api/v1/auto_login,这个接口在默认部署下开启(AUTO_LOGIN=true 为默认值,见 Langflow 官方 GHSA 公告),它对任意网络调用者直接返回一个 SUPERUSER 角色的 bearer token,请求里不需要任何凭据。IBM 公告的原文描述是「mints SUPERUSER tokens to any network caller」。
一次不带任何认证头的 GET,换回一个超管令牌。这一步单看已经够严重,但它只完成了拿钥匙的动作。
第二步:validate/code 在函数定义时就执行了代码
POST /api/v1/validate/code,本来的用途是校验用户自定义组件的代码合法性。CVE-2025-3248 曝出时,官方给它加上了认证;现在攻击者手里有超管 token,这道认证等于纸糊。
接口内部用 exec()处理提交的代码。这里有个常被忽略的 Python 细节:即使校验器只编译、从不调用你定义的函数,装饰器表达式、默认参数值、类型注解这三样东西在 def 语句执行时就会立即求值。IBM 公告专门点名了这个机制(「executed Python decorators, default arguments, and annotations at function definition time」)。所以一段形如下面的组件代码,在函数「被定义」的瞬间命令就跑完了:
import os def probe(x=os.popen(「id」).read()): pass
执行权限等于 Langflow 后端进程的权限,社区对本次 KEV 的战术摘要提到,默认容器以 root 运行时影响直接覆盖宿主机挂载范围。两条请求,一条拿 token,一条送代码,中间没有用户交互,也不需要任何合法账号。
这也解释了 SOC 为什么难看见:单独一条 auto_login 请求长得像监控探活,单独一条 validate/code 请求像开发者在调试组件,必须在日志层面做关联才能现形。
同一个 exec(),15 个月 6 张 KEV 门票
把 KEV 目录里 Langflow 相关条目全部拉出来数一遍(来源:CISA KEV 数据,2026 年 8 月),一共 6 条:
| CVE | 进 KEV 时间 | 入口与根因 | 修复 | | — | — | — | — | | CVE-2025-3248 | 2025-05-05 | /api/v1/validate/code 无认证直接 exec,KEV 标注勒索团伙在用 | 加认证 | | CVE-2026-33017 | 2026-03-25 | build_public_tmp 公开流端点,data 参数携带任意 Python 进图构建 | 1.9.0,移除 data 参数 | | CVE-2025-34291 | 2026-05-21 | CORS 配 allow_origins=’*’加 SameSite=None 刷新 cookie,账号接管链 | 受影响版本≤1.6.9(NVD) | | CVE-2026-55255 | 2026-07-07 | /api/v1/responses 存在 IDOR(不安全的直接对象引用),越权执行他人 flow | 1.9.1 | | CVE-2026-0770 | 2026-07-21 | validate 端点 exec_globals 参数注入,无需认证 | 1.9.0(KEV 引用) | | CVE-2026-9198 | 2026-08-04 | auto_login 默认发超管 token,配合 validate/code 成链 | 1.10.1 |
这条时间线暴露的是架构层面的问题。图执行引擎靠 exec()跑用户组件,整个安全模型都压在「认证挡在 exec 前面」这一个假设上:3248 补了认证,33017 从公开流端点绕过去,9198 干脆让 auto_login 直接发超管 token,把认证层整个架空。每修一次,攻击者换一扇窗,窗后面始终是同一个 exec()。
33017 的 GitHub 公告里有句大实话值得单独摘出来:公开流端点在设计上就是无认证的,加认证救不了,只能删掉 data 参数。我个人由此得出的判断(个人观点):只要「执行用户代码」还是这个产品的核心卖点,这类漏洞就会继续长出来,运营侧要按「迟早被打穿」做预案,把精力放在检测和凭据隔离上。
自查与检测:三条能直接落地的规则
资产侧先确认版本和暴露面。容器部署看镜像 tag,pip 部署跑pip show langflow,落在 1.0.0 到 1.10.0 区间的全部算中招面。顺手用 FOFA 或 Shodan 拿 langflow 当指纹扫一遍自有网段,重点盯 7860 端口的公网暴露。别漏测试环境,这类工具最常见的形态恰恰是某个人为验证想法临时拉起来的实例,从没进过 CMDB。
日志侧盯两段式特征。Nginx 或网关的访问日志先查外网来源的 auto_login:
grep 'GET /api/v1/auto_login' access.log
命中后取源 IP,再查同一 IP 是否在短时间内出现过 POST /api/v1/validate/code。auto_login 单次请求可能来自健康检查,auto_login 之后紧跟 validate/code 的组合,在正常业务里我找不到第二种解释。一旦命中就按失陷处理:Langflow 进程持有的 LLM API key、数据库连接串、向量库凭据全部轮换,IBM 公告明确说这类环境变量是攻击者的首要目标。
主机侧看进程树。Langflow 是 Python 进程,正常业务路径里它没有理由派生 sh 或 bash。EDR 里把「父进程为 Langflow 相关 python、子进程为 shell」配成高优先级告警;Falco 容器环境用默认的 shell-in-container 规则加父进程过滤即可覆盖。MITRE ATT&CK 映射落在 T1190(面向公众应用的利用)、T1059.006(Python)、T1528(窃取应用访问令牌)。
补丁只封入口,不清理屋里的东西
升级 1.10.1 切断了利用链,但对已经进来的攻击者没有任何影响。KEV 里 CVE-2025-3248 的勒索使用状态标注为 Known,盯这个生态的远只有渗透测试团队。打过补丁的团队建议回溯至少 90 天的日志查上面两段式特征,重点看 7 月 2 日 IBM 公告发布之前的窗口,那段日子里漏洞细节已经存在,只是没上新闻。轮换凭据的动作同理,补丁打得再快也换不回已经落库的 API key。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:bird网络安全 cwbird cwbird《两条HTTP请求打穿AI工作流引擎:Langflow CVE-2026-9198利用链拆解,这已是它第六次进KEV》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论