CC源码剖析 #15 · 安全审查:Security Review 命令实现

基于 2026-03-31 公开的源码快照,~512,000 行代码


一、Security Review 命令定位

/security-review 是 Claude Code 内置的安全审查命令,通过解析 git diff 分析 PR 中的代码变更,识别高置信度的安全漏洞。

用户执行 /security-review
    │
    ▼
┌────────────────────────────────────────┐
│  Security Review Command               │
│  1. 获取 git diff                      │
│  2. 获取修改文件列表                   │
│  3. 构建安全审查 prompt               │
└────────────────────────────────────────┘
    │
    ▼
┌────────────────────────────────────────┐
│  Agent 处理                            │
│  分析 diff → 识别漏洞 → 输出报告      │
└────────────────────────────────────────┘
    │
    ▼
结构化安全报告(Markdown 格式)

二、命令实现

文件:src/commands/security-review.ts

2.1 命令定义

1
2
3
4
5
6
7
8
// 允许的工具(白名单)
allowed-tools: Bash(git diff:*), Bash(git status:*),
               Bash(git log:*), Bash(git show:*),
               Bash(git remote show:*), Read, Glob, Grep, LS, Task

// 描述
description: Complete a security review of the pending changes
             on the current branch

2.2 工具白名单策略

1
2
3
4
5
6
7
8
9
// 限制只能使用:
// 1. Git 读取命令(diff, status, log, show, remote show)
// 2. 文件读取(Read, Glob, Grep, LS)
// 3. Task(用于并行分析)

// 禁止:
// - Bash(其他命令)
// - FileWrite / FileEdit
// - Network tools

三、安全审查 Prompt

文件:src/commands/security-review.ts:6-179

3.1 核心 Objective

Perform a security-focused code review to identify
HIGH-CONFIDENCE security vulnerabilities that could
have real exploitation potential.

关键约束

  • 只报告置信度 >80% 的漏洞
  • 排除理论性问题
  • 聚焦高影响漏洞

3.2 排除类别(False Positive 过滤)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 自动排除以下类型:
HARD EXCLUSIONS:
1. DOS / 资源耗尽
2. 磁盘上的 secrets(其他工具处理)
3. 速率限制问题
4. 内存/CPU 耗尽
5. 非安全关键字段的输入验证
6. GitHub Action workflow 漏洞(除非明确可触发)
7. 内存安全语言中的内存安全问题(Rust 等)
8. 测试文件中的问题
9. 日志伪造
10. SSRF(仅控制 path 时)
11. AI prompt 注入
12. Regex injection/DOS
13. 文档文件中的问题
14. 缺少审计日志

3.3 优先规则

1
2
3
4
5
6
7
PRECEDENTS:
1. 明文日志记录高价值 secrets → HIGH
2. UUIDs → 不可猜测,无需验证(安全)
3. 环境变量和 CLI flags → 信任(安全)
4. React/Angular XSS → 除非使用 dangerouslySetInnerHTML(安全)
5. 客户端 JS 缺少权限检查 → 不算漏洞(安全)
6. Notebook 漏洞 → 需要明确攻击路径(安全)

四、安全审查类别

4.1 输入验证漏洞

类型检查内容
SQL Injection未清理的用户输入进入 SQL 查询
Command Injectionsystem calls / subprocesses 中的命令注入
XXE InjectionXML 解析中的外部实体
Template Injection模板引擎中的模板注入
NoSQL Injection数据库查询中的 NoSQL 注入
Path Traversal文件操作中的路径遍历

4.2 认证与授权

类型检查内容
Auth Bypass认证绕过逻辑
Privilege Escalation权限提升路径
Session Management会话管理缺陷
JWT VulnerabilitiesJWT token 漏洞
Authorization Bypass授权逻辑绕过

4.3 加密与密钥管理

类型检查内容
Hardcoded Secrets硬编码的 API keys / passwords / tokens
Weak Crypto弱加密算法实现
Key Storage不当的密钥存储
Randomness Issues加密随机性问题
Cert Validation Bypass证书验证绕过

4.4 注入与代码执行

类型检查内容
RCE via Deserialization反序列化导致的 RCE
Pickle InjectionPython pickle 注入
YAML DeserializationYAML 反序列化漏洞
Eval Injection动态代码执行中的 eval 注入
XSSWeb 应用中的 XSS(reflected/stored/DOM)

4.5 数据泄露

类型检查内容
Sensitive Logging敏感数据日志记录
PII ViolationsPII 处理违规
API LeakageAPI 端点数据泄露
Debug Exposure调试信息暴露

五、分析方法论

5.1 三阶段分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Phase 1: 仓库上下文研究
// - 识别现有安全框架和库
// - 查找established secure coding patterns
// - 理解项目的安全模型

// Phase 2: 对比分析
// - 比较新代码与现有安全模式
// - 识别偏离安全实践的地方
// - 标记引入新攻击面的代码

// Phase 3: 漏洞评估
// - 检查每个修改文件的安全影响
// - 追踪数据流从用户输入到敏感操作
// - 识别注入点和unsafe反序列化

六、输出格式

6.1 要求的 Markdown 格式

1
2
3
4
5
6
# Vuln 1: XSS: `foo.py:42`

* Severity: High
* Description: ...
* Exploit Scenario: ...
* Recommendation: ...

6.2 严重级别定义

级别定义
HIGH直接可利用的漏洞,导致 RCE、数据泄露或认证绕过
MEDIUM需要特定条件但影响显著
LOW纵深防御问题或低影响漏洞

6.3 置信度评分

分数定义
0.9-1.0确定的利用路径,已测试
0.8-0.9清晰的漏洞模式,已知利用方法
0.7-0.8可疑模式,需要特定条件利用
<0.7不报告(太理论化)

七、执行流程

/security-review
  │
  ├─→ 获取 git status
  ├─→ 获取 git diff --name-only origin/HEAD...
  ├─→ 获取 git log origin/HEAD...
  ├─→ 获取 git diff origin/HEAD...
  │
  ├─→ 构建 prompt(diff + 指令)
  │
  └─→ Agent 分析 → Markdown 报告

八、与 /review 的区别

特性/security-review/review
焦点安全漏洞通用代码质量
输入git diffPR 或代码变更
工具限制严格(只读 git + 文件)宽松(所有工具)
排除规则详细 False Positive 过滤较少
输出结构化漏洞报告通用 review 意见

九、其他内置 Review 命令

命令功能
/review通用代码 review
/security-review专注安全漏洞
/ultrareview深度 review(多轮)

Claude Code 源码研究系列 · 2026 · skyseraph

SkySeraph
SkySeraph
AI for All & All for AI
留言 Comments