安全漏洞 / 严重 / 后端服务
electron/services/mcp-manager.service.ts
MCPManager 启动 MCP Server 时通过 stdio 通信,使用 child_process.spawn(command, args)。 但 command 与 args 来自 MCP 配置文件(用户可编辑 / 第三方可篡改),未做:
child_process.spawn(command, args)
command
args
;
&&
|
$()
恶意配置可执行任意命令:
{ "command": "node; rm -rf /", "args": ["-e", "require('child_process').exec('malicious')"] }
const ALLOWED_COMMANDS = new Set(['npx', 'node', 'python', 'python3', 'uvx']);
execFile
spawn
文件: electron/services/mcp-manager.service.ts
问题: MCPManager 启动 MCP Server 时,command 和 args 来自用户可编辑的配置文件,无白名单校验和参数注入检测,恶意配置可执行任意命令。
修复方案:
ALLOWED_MCP_COMMANDS
npx/node/npm/python/python3/uv/uvx/bun/deno
validateMcpCommand(command, args)
.exe
&
`
{}
<>
\
buildSafeEnv()
process.env
connectServer()
验证: tsc --noEmit 类型检查通过。
tsc --noEmit
No dependencies set.
The note is not visible to the blocked user.
问题类型
安全漏洞 / 严重 / 后端服务
文件位置
electron/services/mcp-manager.service.ts问题描述
MCPManager 启动 MCP Server 时通过 stdio 通信,使用
child_process.spawn(command, args)。但
command与args来自 MCP 配置文件(用户可编辑 / 第三方可篡改),未做:;&&|$()shell metacharacters)恶意配置可执行任意命令:
影响
建议修复
const ALLOWED_COMMANDS = new Set(['npx', 'node', 'python', 'python3', 'uvx']);execFile而非spawn(不经过 shell)修复说明
文件:
electron/services/mcp-manager.service.ts问题: MCPManager 启动 MCP Server 时,
command和args来自用户可编辑的配置文件,无白名单校验和参数注入检测,恶意配置可执行任意命令。修复方案:
ALLOWED_MCP_COMMANDS白名单:仅允许npx/node/npm/python/python3/uv/uvx/bun/deno等标准运行时validateMcpCommand(command, args)函数:.exe后缀);&|`$(){}<>\换行等)buildSafeEnv()函数:构建精简环境变量,仅保留 PATH/HOME/USERPROFILE/TEMP 等必要变量,防止process.env中的敏感信息(API keys、tokens)泄露给子进程connectServer()的 stdio 分支接入校验和精简 env验证:
tsc --noEmit类型检查通过。