# 漏洞总结:Branch Monkey 命令注入漏洞 ## 漏洞概述 * **漏洞名称**:Branch Monkey Command Injection via `/api/local-claude/time-machine/preview` * **漏洞类型**:OS Command Injection (CWE-78 / CWE-88) * **严重程度**:Critical (CVSS v3.1 评分 9.8) * **根本原因**:`/api/local-claude/time-machine/preview` 接口接收用户输入的 `dev_script` 字段,并将其直接拼接到 shell 命令中,通过 `subprocess.Popen(..., shell=True)` 执行。攻击者可以通过构造包含特殊字符(如 `;`, `&&`, `$()`)的 `dev_script` 实现任意命令执行。 ## 影响范围 * **受影响产品**:Branch Monkey MCP / Company local bridge * **受影响版本**:`gtyal/p_69_branch_monkey_mcp` (Commit `gtyal79`) * **前置条件**: 1. 攻击者需能访问本地桥接 HTTP 端点。 2. 攻击者需提供有效的 `project_path`(指向本地 Git 仓库)和 `commit_sha`(存在于该仓库中)。 ## 修复方案 1. **移除 shell 执行**:完全移除 `dev_script` 的 shell 执行功能。 2. **白名单机制**:使用小范围的已知安全预设命令替换自由表单命令。 3. **参数化调用**:如果必须自定义命令,使用 `arg list` 进行严格验证,避免使用 shell。 4. **代码级修复**:将 `subprocess.Popen(command, shell=True, ...)` 替换为非 shell 的 `arg` 基于调用方式。 5. **输入验证**:将请求的预览命令视为结构化配置而非原始 shell 字符串,并添加覆盖元字符(如 `;`, `&&`, backticks, `$()`)的回归测试。 ## POC 代码 ```http POST /api/local-claude/time-machine/preview HTTP/1.1 Host: target-host Content-Type: application/json { "commit_sha": "existing_commit_sha", "project_path": "/path/to/local/git/repo", "dev_script": "touch /tmp/codex_cmd_poc; python3 -m http.server {port}" } ```