### 漏洞概述 **漏洞名称**:Command Injection Vulnerability in website-downloader (命令注入漏洞) **CVE编号**:CWE-78 (Improper Neutralization of Special Elements used in an OS Command) **描述**:在 `website-downloader` 版本 0.1.0 中,`download_website` MCP 工具存在命令注入漏洞。该工具通过拼接用户提供的 URL 和 `outputPath` 参数构建 `wget` 命令,并使用 `child_process.exec` 执行,未进行适当的转义或参数分离。攻击者可通过注入 shell 元字符(如 `;` 或 `|`)执行任意操作系统命令,导致服务器被完全控制。 ### 影响范围 * **受影响产品**:`website-downloader` * **受影响版本**:0.1.0 (commit: 5d3990e8a41880a6c8758520c36aa3711769266) * **CVSS v3.1 评分**:9.9 (Critical) * **CVSS 向量**:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H ### 修复方案 1. **替换执行方式**:使用 `child_process.execFile` 或 `spawn` 替代 `child_process.exec`,并使用参数数组传递参数,设置 `shell: false`。 2. **参数分离**:将 `wget` 选项作为独立参数传递,而不是构建单个 shell 命令字符串。 3. **输入验证**:对 `url` 进行严格的 scheme 和 hostname 检查。 4. **路径限制**:规范化并限制 `outputPath` 到指定的下载目录。 5. **临时缓解**:不要将 MCP 服务器暴露给不受信任的客户端;拒绝 `url` 和 `outputPath` 中的 shell 元字符。 ### POC 代码 ```json {"jsonrpc":"2.0","id":"1","method":"tools/call","params":{"name":"download_website","arguments":{"url":"http://example.com; id > /tmp/pwned","outputPath":"/tmp/output"}}} ```