系统:运行中
← 返回所有攻击
AGENTS CRITICAL NEW

Flowise CVE-2026-40933:导入一个共享 chatflow 即可触发 RCE

Obsidian Security 2026 年 5 月 28 日的分析显示,Flowise 的 Custom MCP 节点如何把一份 stdio MCP 配置变成服务器端代码执行——以及仅仅导入一个共享 chatflow 就可能触发它,无需保存或运行。

2026-06-01 // 6 min affects: flowise

这是什么?

Flowise 是一款流行的开源拖拽式 LLM 工作流与 AI 智能体构建器(GitHub 星标超过 5.2 万)。它的构件之一是 Custom MCP 节点,允许 chatflow 使用用户提供的 JSON 配置连接到 Model Context Protocol 服务器。

CVE-2026-40933——“Flowise: Authenticated RCE Via MCP Adapters”,于 2026 年 4 月 16 日发布到 GitHub Advisory Database(GHSA-c9gw-hvqq-f33r)——记录了这样一个事实:使用 stdio 传输的 Custom MCP 配置会让 Flowise 服务器启动配置中所指定的任意命令,且无沙箱。2026 年 5 月 28 日,Obsidian Security 发布了一篇详细分析,揭示了其中最令人不安的部分:攻击者无需说服受害者去运行任何东西。仅仅导入一个共享 chatflow 就可能足以触发执行。 GitHub 复核的严重性为“严重”;公布的 CVSS 3.1 向量为 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H。受影响版本为 flowiseflowise-components <= 3.0.13;公告指出修复在 3.1.0 中。

工作原理

stdio MCP 传输在设计上就是一个代码执行原语:客户端收到 command、可选的 argsenv,然后把该命令作为子进程启动,通过标准输入/输出交换 JSON-RPC。当控制该配置的是一个低信任用户——或一个被导入的工件——时,这个原语就变成了主机上的任意代码执行。

Flowise 增加了一层输入校验(CUSTOM_MCP_SECURITY_CHECK),通过白名单允许少数启动器(nodenpxpythonpython3docker),阻止路径穿越模式,并剥离 shell 元字符。问题在于——GitHub 公告和 Obsidian 都有记录——一个被列入白名单的启动器与一个可运行代码的参数组合起来,仍然会执行代码。概念上:

{
  "command": "<allowlisted-launcher>",   // 通过命令白名单
  "args": ["<flag-that-evaluates-code>", "<REDACTED>"]
}

确切的 payload 在公告和研究者的分析中是公开的;此处刻意不予复现。要点是结构性的:输入校验减少了通往执行的明显路径,但并不消除底层能力,因为恶意行为可以在该功能的合法输入空间内表达。

“一键”升级才是真正的新发现。Flowise 的 Custom MCP 节点有一个 “Available Actions” 下拉菜单,用于列举所配置 MCP 服务器暴露的工具。对于 stdio,列举工具就意味着启动所配置的命令——而当被导入的 chatflow 首次在画布上渲染时,这次列举就会触发。因此,一个导入“看起来不错”的共享 chatflow、只想看看它能做什么的受害者,可能在任何保存或运行之前就触发了服务器端执行,且没有任何授权提示。Obsidian 在 Flowise 3.1.2 上进行了测试,并报告在该版本中基于校验的加固仍可被绕过。

这是我们曾报道过的更广泛模式的“智能体平台”实例:当 prompt 和配置变成 shell。这里不可信的输入不是 prompt,而是一个共享的工作流文件。

为什么重要

Flowise 通常位于编排层,连接着数据库、API 密钥和云账户。在该进程中执行代码意味着每一份存储的凭据都可读、每一个连接的服务都可达——在容器化部署中该进程往往以 root 运行,因此影响半径就是整个容器及其能触及的一切。

这种暴露并非理论。一个更早且不同的 Custom MCP 缺陷——CVE-2025-59528(CVSS 10.0,通过 Function() 构造器的 JavaScript 注入,已在 3.0.6 中修复)——据 VulnCheck,其首次野外利用发生在 2026 年 4 月 6 日,当时约有 1.2 万到 1.5 万个 Flowise 实例暴露在公网上。同一类节点如今已产生多个严重 CVE 与活跃攻击。Flowise Cloud 不受影响,因为那里禁用了 stdio MCP;风险在于自托管部署。

防御

  1. 如不需要 stdio MCP,请将其关闭。 设置 CUSTOM_MCP_PROTOCOL=sse。Obsidian 称这是最有效的缓解措施;它消除了执行原语,而非试图过滤它。
  2. 不要只依赖输入校验。 CUSTOM_MCP_SECURITY_CHECK 默认启用,但存在已记录的绕过方式。把它当作纵深防御,而非边界。
  3. 先升级,再核验。 摆脱 flowise/flowise-components <= 3.0.13;公告将 3.1.0 列为修复版本。同时确认你已高于 3.0.6 以封堵 CVE-2025-59528。重新测试你的配置不再允许“启动器 + 运行代码参数”的组合。
  4. 将导入的 chatflow 视为不可信代码。 一个共享的 chatflow JSON 文件可能携带在导入时执行的 MCP 配置。导入前先审查 chatflow,且绝不要在持有真实凭据的服务器上从未知来源导入。
  5. 让 Flowise 远离公网。 将其置于身份验证和 VPN/白名单之后。上文的暴露实例数说明了扫描器为何能如此快地找到它们。
  6. 隔离运行时并实施最小权限。 在沙箱化的容器中以非 root 用户运行 Flowise,配合出站网络过滤和范围受限的凭据,使得一次 MCP 代码执行事件被遏制,而非演变为灾难。

状态

项目参考日期备注
CVE-2026-40933 公告(GHSA-c9gw-hvqq-f33r)GitHub Advisory Database2026-04-16经 MCP 适配器的已认证 RCE;影响 <= 3.0.13;3.1.0 修复;CWE-78
Obsidian Security 分析(导入即一键 RCE)Obsidian Security2026-05-28导入时的列举触发执行;3.1.2 中校验可绕过
CVE-2025-59528(Custom MCP Function() 注入)GitHub Advisory Database / NVD2025-09 → 3.0.6 修复CVSS 10.0;同一节点中的姊妹缺陷
CVE-2025-59528 的野外利用经 CSO Online 的 VulnCheck2026-04-06约 1.2 万–1.5 万个暴露实例;首次观察到的利用

真正重要的视角是:使用 stdio MCP,谁能影响配置,谁就能获得代码执行,而在共享平台上,这包括某人导入的一个 chatflow 文件。过滤参数只是收窄了路径;唯有禁用该原语或对运行时进行沙箱化,才能将其关闭。

Sources