# Flowise 远程代码执行漏洞
## 概述
Flowise 是一个用于构建定制化大语言模型流程的可视化拖拽工具。在版本 3.0.5 中,存在一个远程代码执行(RCE)漏洞。
## 影响版本
- **受影响版本**:3.0.5
## 漏洞细节
漏洞源于 **CustomMCP 节点** 的配置处理逻辑。该节点允许用户输入 `mcpServerConfig` 字符串,用于配置与外部 MCP 服务器的连接。在处理过程中,系统通过 `convertToValidJSONString` 函数解析该字符串,**使用 `Function()` 构造函数直接执行用户输入的内容**,而未经任何安全校验。
由于 `Function()` 会将输入作为 JavaScript 代码执行,**攻击者可以注入恶意代码并通过 Node.js 环境执行**,例如访问 `child_process` 和 `fs` 等危险模块,实现任意命令执行和文件操作。
## 漏洞影响
该漏洞允许攻击者在目标系统上执行任意代码,从而可能导致:
- 敏感数据泄露
- 服务器被控制
- 应用被篡改或破坏
## 补丁状态
该问题已在版本 **3.0.6** 中修复。建议用户升级至该版本或以上版本以确保安全。
是否为 Web 类漏洞: 是
判断理由:
标题: Release flowise@3.0.6 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中,关于漏洞的关键信息如下:
- **Bugfix**部分列出了多个修复的漏洞和问题:
- `Bugfix/unshift system message` by @HenryHengZJ in #5080
- `Fixes problematic json parsing` by @PBJI in #5077
- `Fix chatflow's type null or blank` by @chungyau97 in #5065
- `Bugfix/Upsert API for file loader` by @HenryHengZJ in #5096
- `Bugfix/Export all chat messages` by @HenryHengZJ in #5169
- `Fix Oxylabs documentloader API calls` by @oxy-rostyslav in #5162
- `Fix use case-insensitive email lookup and comparison during login` by @chungyau97 in #5145
- `Fixed background color of file upload box in Chat configuration` by @kushalbhana in #5132
- `Bugfix/Gsuite tool params` by @HenryHengZJ in #5189
- `Bugfix/Array Input Variables` by @HenryHengZJ in #5196
- `Bugfix/Securely Fetch Links` by @HenryHengZJ in #5200
- `Bugfix/JSON5 Parsing` by @HenryHengZJ in #5201
- `Bugfix/Human Input As First Node` by @HenryHengZJ in #5202
- `Bugfix/add path traversal check to chatId` by @HenryHengZJ in #5208
这些修复涉及到系统消息、JSON解析、类型检查、API调用、文件导出、电子邮件处理、界面显示、参数处理、变量输入、链接获取、JSON5解析、节点输入和路径遍历等多个方面。
标题: RCE in Flowise · Advisory · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键漏洞信息
#### 漏洞概述
- **漏洞类型**: RCE (远程代码执行)
- **严重性**: Critical (CVSS v3 基本分数: 10.0/10)
- **CVE ID**: CVE-2025-50528
- **受影响版本**: 3.0.5
- **修复版本**: 3.0.6
#### 漏洞原因
Flowise 的 `@flowise/node` 模块允许用户输入配置设置以连接到外部 MCP(模型上下文协议)服务器。在解析用户提供的 `mcpServerConfig` 字符串时,直接将用户输入传递给 `Function()` 构造函数,导致任意 JavaScript 代码的执行。
#### 漏洞流程
1. 用户输入通过 API 端点 `/api/v1/node-load-method/customMCP` 提供。
2. `substituteVariablesInString` 函数替换模板变量,但未进行安全过滤。
3. `convertToValidJSONString` 函数使用 `Function('return ' + inputString)()` 执行输入,如果包含恶意代码,则在全局 Node.js 上下文中执行。
#### 污染流
- Taint 01: 路由注册 (`index.ts`)
- Taint 02: 控制器 (`index.ts`)
- Taint 03: 服务 (`index.ts`)
- Taint 04: 自定义 MCP 节点入口点 (`CustomMCP.ts`)
- Taint 05: 变量替换 (`CustomMCP.ts`)
- Taint 06: 危险构造函数执行 (`CustomMCP.ts`)
#### 概念验证 (PoC)
```bash
curl -X POST http://localhost:3000/api/v1/node-load-method/customMCP \
-H "Content-Type: application/json" \
-H "Authorization: Bearer twfIfpgZG-nwLu29h7VbHriOaISZlDZjFSxzr7nd9QY" \
-d '{"listMethod": "listActions", "inputs": {"mcpServerConfig": "{x:(function(){const cp = process.mainModule.require(\"child_process\");cp.execSync(`echo ls ->RCE.txt`)})()}}"
```
#### 影响
- 完整系统接管和基础设施威胁
- 全系统妥协
- 文件系统访问
- 命令执行
- 敏感数据泄露
仅需一个 API Token 即可利用此漏洞,对业务连续性和客户数据构成极端安全风险。
标题: Flowise/packages/server/src/services/nodes/index.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
1. **错误处理不充分**
- 在多个函数中,如 `getAllNodes`、`getNodesForCategory` 和 `getNodeByName`,错误处理仅记录错误但未提供详细的错误信息或上下文。这可能导致在出现问题时难以调试和修复。
2. **缺少输入验证**
- 函数如 `getComponentNodeIcon` 和 `getQlikNodeIdFromName` 没有对输入参数进行充分的验证,可能会导致注入攻击或其他安全问题。
3. **硬编码错误消息**
- 错误消息如 "Node $ {nodeName} not found" 和 "Node $ {nodeId} not found" 是硬编码的,缺乏灵活性和国际化支持。
4. **潜在的异步问题**
- 在 `getQlikNodeIdFromName` 和 `getQlikNodeAsyncOptions` 中使用了异步操作,但没有明确的错误处理机制,可能会导致未捕获的异常。
5. **依赖外部服务**
- 多个函数依赖于外部服务(如 `qlikService`),如果这些服务不可用或响应异常,可能会导致整个系统崩溃。
标题: Flowise/packages/server/src/controllers/nodes/index.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中,可以获取到以下关于漏洞的关键信息:
- **代码文件路径**:`Flowise/packages/server/src/controllers/nodes/index.ts`
- **提交信息**:由用户 `HenryHengZJ` 提交,提交信息为 `Bugfix/update workspaceId to vars (#4891)`,提交时间为 2 个月前。
- **关键函数和错误处理**:
- `getNodesByCategory` 函数在第 30 行开始,如果请求参数 `name` 未定义或为空字符串,则抛出 `InternalFlowiseError` 错误,状态码为 `PRECONDITION_FAILED`。
- `getSingleNodeAsyncOptions` 函数在第 57 行开始,如果请求体 `req.body` 不存在,则抛出 `InternalFlowiseError` 错误,状态码为 `PRECONDITION_FAILED`。同样,如果请求参数 `name` 未定义,则也抛出相同错误。
- **潜在漏洞点**:
- 如果攻击者能够控制请求参数 `name` 或请求体 `req.body`,可能会触发这些错误处理逻辑,导致服务中断或暴露内部错误信息。
- 错误处理中使用了 `InternalFlowiseError` 类,这可能是一个自定义的错误类,用于统一处理内部错误。如果该类的实现不当,可能会泄露敏感信息。
总结:
```markdown
### 关键信息
- **文件路径**: Flowise/packages/server/src/controllers/nodes/index.ts
- **提交信息**:
- 提交者: HenryHengZJ
- 提交描述: Bugfix/update workspaceId to vars (#4891)
- 提交时间: 2 个月前
### 潜在漏洞点
- **函数**: getNodesByCategory, getSingleNodeAsyncOptions
- **错误处理**:
- 如果请求参数 `name` 未定义或为空字符串,抛出 `InternalFlowiseError` 错误,状态码为 `PRECONDITION_FAILED`。
- 如果请求体 `req.body` 不存在,同样抛出 `InternalFlowiseError` 错误,状态码为 `PRECONDITION_FAILED`。
- **风险**: 攻击者可能通过控制请求参数或请求体触发错误处理逻辑,导致服务中断或泄露内部信息。
```
标题: Flowise/packages/server/src/routes/node-load-methods/index.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中可以获取到以下关于漏洞的关键信息:
- **代码路径**:`Flowise/packages/server/src/routes/node-load-methods/index.ts`
- **相关提交**:由 `ocflowiseai` 和 `HenryHengZJ` 提交,提交信息为 "Chore/consistent services and error handlers (#2101)",提交哈希为 `d7194e8`,提交时间为去年。
- **关键代码行**:
```typescript
router.post(['/', '/:name'], nodesRouter.getSingleNodeAsyncOptions)
```
这一行代码定义了一个 POST 请求路由,可能存在的问题是:
- **路径参数注入**:`:name` 参数可能被恶意利用,导致路径注入攻击。
- **缺少输入验证**:没有看到对 `/:name` 参数的验证或清理,可能导致安全风险。
这些信息表明可能存在路径注入或输入验证不足的安全隐患。
标题: Flowise/packages/components/nodes/tools/MCP/CustomMCP/CustomMCP.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
1. **XSS 漏洞**
- 在 `CustomMCPS` 组件中,存在一个名为 `handleMessage` 的函数,该函数处理来自服务器的消息。
- 代码中直接将接收到的消息内容插入到页面中,没有进行适当的转义或过滤,可能导致跨站脚本(XSS)攻击。
2. **代码片段示例**
```javascript
const handleMessage = (message) => {
// ...
setMessages((prevMessages) => [...prevMessages, message]);
// ...
};
```
3. **潜在风险**
- 攻击者可以通过发送恶意消息,注入恶意脚本,从而在受害者的浏览器中执行任意代码。
- 这可能包括窃取用户数据、劫持会话、重定向到恶意网站等。
4. **建议修复措施**
- 对接收到的消息内容进行严格的输入验证和输出编码。
- 使用安全的库或框架提供的方法来防止 XSS 攻击,例如 React 的 `dangerouslySetInnerHTML` 应谨慎使用,并确保内容是可信的。
```
这个Markdown总结了从截图中获取的关键漏洞信息,特别是关于XSS漏洞的存在、相关代码片段、潜在风险以及建议的修复措施。
标题: Flowise/packages/components/nodes/tools/MCP/CustomMCP/CustomMCP.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
- **漏洞类型**: XSS (跨站脚本攻击)
- **检测方法**: 通过检查HTTP响应头中的`Content-Type`是否包含`text/html`来判断是否存在XSS漏洞。
- **示例代码**:
```javascript
const example = {
url: "http://qilinsec.com/exploits",
request: `GET / HTTP/1.1\r\nHost: qilinsec.com\r\n\r\n`,
response: `HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n`
};
```
- **插件信息**:
- **标签**: string
- **描述**: string
- **作者**: string
- **版本**: string
- **类别**: string
- **自动加载**: string
- **配置选项**: object
- **规则**: array
- **规则示例**:
- **标签**: No available filters
- **描述**: No available filters, show that you can still inject HTML and JavaScript.
- **正则表达式**: `<script>alert\('No available filters'\)</script>`
```
这些关键信息表明,该插件用于检测和识别网页中存在的XSS漏洞,通过分析HTTP响应头和内容来判断是否存在潜在的安全风险。
标题: Flowise/packages/components/nodes/tools/MCP/CustomMCP/CustomMCP.ts at 5930f1119c655bcf8d2200ae827a1f5b9fec81d0 · FlowiseAI/Flowise · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从这个网页截图中,可以获取到以下关于漏洞的关键信息:
- **文件路径**:`flowise/packages/components/node/nodes/HTTP/CustomHTTP/CustomHTTP.tsx`
- **代码片段**:显示了 `CustomHTTP` 节点的实现,该节点用于处理 HTTP 请求。
- **关键函数**:`execute` 函数负责执行 HTTP 请求,并处理请求和响应。
- **潜在漏洞**:
- **输入验证不足**:在处理用户输入时,可能存在对输入数据的验证不足,导致可能的注入攻击或恶意请求。
- **错误处理**:错误处理部分可能不够完善,可能导致在异常情况下暴露敏感信息或未正确处理异常情况。
- **依赖外部库**:使用了 `axios` 库进行 HTTP 请求,需要确保该库的安全性和版本更新,以防止已知漏洞的影响。
这些信息提示开发者需要仔细检查输入验证、错误处理机制以及所使用的外部库的安全性,以避免潜在的安全风险。
Zaproxy alias impedit expedita quisquam pariatur exercitationem. Nemo rerum eveniet dolores rem quia dignissimos.