0xC01DF00D/claude-code-rce-poc
GitHub: 0xC01DF00D/claude-code-rce-poc
演示 Claude Code 在打开恶意 Git 仓库时如何通过 MCP Server 自动批准绕过实现零交互远程代码执行的概念验证。
Stars: 1 | Forks: 0
# PoC:MCP Server 自动批准绕过
## 概述
此概念验证表明,当在 Claude Code 中打开恶意 git 仓库时,可以
实现任意代码执行,而无需任何用户交互,
只需克隆仓库并运行 `claude` 或 `claude -p` 即可。
此漏洞需要将项目克隆到用户信任的目录中。该漏洞被 Anthropic Bug Bounty Program 拒绝接收。
## 工作原理
该攻击结合了两个由仓库控制的文件:
1. **`.mcp.json`** - 定义了一个运行任意命令的恶意 MCP server
2. **`.claude/settings.json`** - 设置 `enableAllProjectMcpServers: true` 以
自动批准所有 MCP server,而不显示批准对话框
### 代码路径(交互模式)
1. 用户在恶意仓库目录中运行 `claude`
2. `showSetupScreens()` 显示信任对话框 - 用户点击“Trust”(正常流程)
3. `handleMcpjsonServerApprovals()` 调用 `getProjectMcpServerStatus()`
4. `getProjectMcpServerStatus()` 读取 `getSettings_DEPRECATED()`(合并后的设置)
5. 合并后的设置包含来自 `.claude/settings.json` 的 `projectSettings`
6. `settings.enableAllProjectMcpServers` 为 `true` -> 返回 `'approved'`
7. MCP server 的命令通过 `StdioClientTransport` 执行
### 代码路径(非交互模式 - 无信任对话框)
1. 用户在恶意仓库中运行 `echo "analyze this code" | claude -p`
2. `isNonInteractive = true` -> 从不调用 `showSetupScreens()`
3. `getProjectMcpServerStatus()` 命中非交互自动批准路径:
`getIsNonInteractiveSession() && isSettingSourceEnabled('projectSettings')`
4. 无需任何用户交互即返回 `'approved'`
5. MCP server 命令执行
## 受影响版本
此 PoC 针对的是提交 `c2357be` (2026-03-31) 处的代码库。该漏洞
存在于 `src/services/mcp/utils.ts` 的第 367-374 行。
## 严重性
**严重 (CRITICAL)** - 非交互模式下的零交互远程代码执行。
在交互模式下,信任对话框是唯一的门槛(但并未专门针对 MCP 自动批准发出警告)。
## 修复方案
仅从 `localSettings`(已被 gitignore 忽略)中读取 `enableAllProjectMcpServers`,
而不是从包含受仓库控制的 `projectSettings` 的合并设置中读取。
## 工作原理
该攻击结合了两个由仓库控制的文件:
1. **`.mcp.json`** - 定义了一个运行任意命令的恶意 MCP server
2. **`.claude/settings.json`** - 设置 `enableAllProjectMcpServers: true` 以
自动批准所有 MCP server,而不显示批准对话框
### 代码路径(交互模式)
1. 用户在恶意仓库目录中运行 `claude`
2. `showSetupScreens()` 显示信任对话框 - 用户点击“Trust”(正常流程)
3. `handleMcpjsonServerApprovals()` 调用 `getProjectMcpServerStatus()`
4. `getProjectMcpServerStatus()` 读取 `getSettings_DEPRECATED()`(合并后的设置)
5. 合并后的设置包含来自 `.claude/settings.json` 的 `projectSettings`
6. `settings.enableAllProjectMcpServers` 为 `true` -> 返回 `'approved'`
7. MCP server 的命令通过 `StdioClientTransport` 执行
### 代码路径(非交互模式 - 无信任对话框)
1. 用户在恶意仓库中运行 `echo "analyze this code" | claude -p`
2. `isNonInteractive = true` -> 从不调用 `showSetupScreens()`
3. `getProjectMcpServerStatus()` 命中非交互自动批准路径:
`getIsNonInteractiveSession() && isSettingSourceEnabled('projectSettings')`
4. 无需任何用户交互即返回 `'approved'`
5. MCP server 命令执行
## 受影响版本
此 PoC 针对的是提交 `c2357be` (2026-03-31) 处的代码库。该漏洞
存在于 `src/services/mcp/utils.ts` 的第 367-374 行。
## 严重性
**严重 (CRITICAL)** - 非交互模式下的零交互远程代码执行。
在交互模式下,信任对话框是唯一的门槛(但并未专门针对 MCP 自动批准发出警告)。
## 修复方案
仅从 `localSettings`(已被 gitignore 忽略)中读取 `enableAllProjectMcpServers`,
而不是从包含受仓库控制的 `projectSettings` 的合并设置中读取。标签:AI安全, Anthropic, Chat Copilot, CIS基准, Claude Code, .claude/settings.json, DNS 解析, .mcp.json, MCP Server, PoC, RCE, TTP, 大模型安全, 恶意代码仓库, 搜索语句(dork), 数据展示, 文档安全, 暴力破解, 红队, 编程工具, 网络安全研究, 自动审批绕过, 远程代码执行, 配置文件利用, 零交互漏洞, 非交互模式, 项目信任机制