漏洞概述 漏洞名称: Marketplace Plugin Poisoning Enables Instance-Wide Remote Code Execution CVE ID: CVE-2025-55413 CVSS 4.0 Score: 9.9 (Critical) 受影响组件: 产品: ToolJet (CE and Cloud editions) 版本: 3.x (tested on latest) 组件: Plugin update endpoint ( , , ) 攻击链: 1. 创建恶意GitHub仓库: 包含 , , 和 (恶意代码)。 2. 列出已安装的插件: 通过 获取所有插件的UUID。 3. 覆盖插件: 通过 将恶意插件上传。 4. 触发执行: 创建数据源并使用该插件运行查询,触发远程代码执行。 影响范围 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 POC代码 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3. 不安全代码执行沙箱: 插件代码在Node.js VM 中执行, 和 暴露。 4. 无完整性验证: 无签名、哈希或白名单检查,任何公共仓库URL均被接受。 影响 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3. 不安全代码执行沙箱: 插件代码在Node.js VM 中执行, 和 暴露。 4. 无完整性验证: 无签名、哈希或白名单检查,任何公共仓库URL均被接受。 影响 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3. 不安全代码执行沙箱: 插件代码在Node.js VM 中执行, 和 暴露。 4. 无完整性验证: 无签名、哈希或白名单检查,任何公共仓库URL均被接受。 影响 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3. 不安全代码执行沙箱: 插件代码在Node.js VM 中执行, 和 暴露。 4. 无完整性验证: 无签名、哈希或白名单检查,任何公共仓库URL均被接受。 影响 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3. 不安全代码执行沙箱: 插件代码在Node.js VM 中执行, 和 暴露。 4. 无完整性验证: 无签名、哈希或白名单检查,任何公共仓库URL均被接受。 影响 RCE: 任意命令在ToolJet服务器上执行。 供应链: 中毒插件影响所有用户,跨所有工作区。 横向移动: 访问环境变量、内部网络、数据库凭证等。 隐蔽性: 仅在查询运行时执行负载,无即时指示器。 持久性: 恶意代码在数据库中持久存在,直到插件被还原或重新安装。 关键文件 : PATCH端点,无额外保护。 : 调用 + ,无验证。 : 从任何GitHub仓库获取。 : 存储代码通过 。 : VM执行与 / 。 : 无 ,插件全局。 修复方案 P0 (Immediate): 1. 限制插件PATCH/update为实例管理员,构建者不应能够修改全局共享插件。 2. 按组织范围插件,添加 到插件实体。 P1 (High): 3. 从VM沙箱中移除 和 ,使用 (已用于工作流)代替Node.js VM。 4. 限制插件仓库,仅接受来自 的更新,或验证签名清单。 P2 (Medium): 5. 添加完整性检查,执行前验证插件代码与签名哈希。 6. 限制API,不仅UI,市场UI在某些版本中隐藏在前端检查后,但API端点仍完全可访问。 时间线 2025-05-24: 漏洞发现并确认。 2025-05-24: 报告起草。 根因分析 1. 插件更新无授权边界: 端点仅检查 权限,任何构建者均可修改全局共享插件。 2. 更新路径绕过安装验证: 方法通过 验证插件文件,但 方法调用 ,使用 ,完全绕过验证。 3.