跳转至

安全审计

重要性:⭐⭐⭐⭐(安全全景——Bash + MCP + Path + Auth + Settings + Telemetry 6 大面) 范围src/ 全部安全相关代码 方法:基于 deep-dive(bashSecurity / bashPermissions / mcp/auth / pathValidation / auth)+ 跨文件安全检查


1. 6 大安全面

类别 关键文件 防御目标
Bash 命令 bashSecurity.ts (25+ validator), bashPermissions.ts 危险命令、变量劫持、转义绕过
MCP mcp/auth.ts (ClaudeAuthProvider 985 行) OAuth / PKCE / token 泄露
Path pathValidation.ts (CmdletPathConfig 680 行) 危险路径、rm -rf /
Auth auth.ts (5 种鉴权) API key 泄露、keychain 保护
Settings settings/, policyLimits/ 配置篡改、enterprise policy
Telemetry analytics/ 敏感信息泄露

2. Bash 安全(25+ validator)

详见 topics/deep-dive-bash-security.md

核心防御: - 25+ validator(isSafeHeredoc / validateGitCommit / validateObfuscatedFlags 等) - 6 层决策(exact → wildcard → sandbox → early deny → semantic → classifier) - 50 subcommands 上限 - speculative LLM classifier - ZSH 特殊命令白/黑名单 - Unicode 攻击检测

关键文件: - tools/BashTool/bashSecurity.ts (2592 行) - tools/BashTool/bashPermissions.ts (2621 行) - utils/bash/bashParser.ts (4436 行) - utils/bash/ast.ts (2679 行)


3. MCP OAuth 安全

详见 topics/deep-dive-mcp-auth.md

核心防御: - OAuth 2.0 + PKCE 强制 - Dynamic Client Registration - 12 项敏感参数脱敏 - 30s timeout 防止挂起 - Step-up auth(401 自动重认证) - 985 行 ClaudeAuthProvider 完整实现

关键文件: - services/mcp/auth.ts (2465 行) - services/mcp/client.ts (3348 行)


4. Path 安全

详见 topics/deep-dive-powershell-path.md

核心防御: - 680 行 CmdletPathConfig(50+ cmdlet 配置) - isDangerousRemovalRawPath(rm -rf / 类) - 保守 deny(未明确路径 = deny) - glob 不展开(性能 + 安全) - PowerShell switch 语法支持

关键文件: - tools/PowerShellTool/pathValidation.ts (2049 行)


5. Auth 安全(5 种鉴权)

详见 topics/deep-dive-auth.md

核心防御: - 5 种鉴权方式统一管理 - 优先级链(macOS keychain > env > settings > helper > OAuth) - macOS keychain 隔离(其他平台不存) - pending401Handlers 去重(防 refresh storm) - 1h 3P TTL(AWS / GCP) - 5 min helper TTL - Source 追踪(debug 友好)

关键文件: - utils/auth.ts (2002 行)


6. Settings 同步安全

6.1 services/settingsSync/

作用:CLI 上传用户 settings 到 CCR(Claude Code Remote)。

潜在风险: - 包含 API key 的 settings 文件 - 跨设备同步泄露

防御: - feature('UPLOAD_USER_SETTINGS') 编译时门控 - fire-and-forget,不阻塞

6.2 services/remoteManagedSettings/

作用:企业远程管理 settings 注入。

潜在风险: - 恶意 settings push - 权限提升

防御: - loadRemoteManagedSettings() 异步拉取 - 失败 open(不阻塞) - 注释明确"non-blocking, fail-open"

6.3 services/policyLimits/

作用:企业 policy 限制(rate limit 等)。

防御: - 异步加载 - 失败 open


7. Telemetry 安全

7.1 命名约定

TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS

作者手动验证 —— 错误信息可安全上报。

7.2 redactUrlCredentials

function redactUrlCredentials(urlString: string): string {
  // https://user:pass@github.com → https://***:***@github.com
}

URL 凭证脱敏 —— OAuth 错误中保护用户密码。

7.3 SENSITIVE_OAUTH_PARAMS (12 项)

const SENSITIVE_OAUTH_PARAMS = [
  'client_secret', 'access_token', 'refresh_token', 'id_token', 
  'code', 'state', 'code_verifier', ...
]

12 项 OAuth 敏感参数 —— 错误信息中 redact。

7.4 redactHeaders (mcp)

function redactHeaders(...): ... { ... }

HTTP header 脱敏 —— 不上报 Authorization 等。

7.5 BINARY_HIJACK_VARS

const BINARY_HIJACK_VARS = /^(LD_|DYLD_|PATH$)/

3 个 env vars 黑名单 —— 不允许 bash 命令前设这些。

7.6 AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS

类型级安全标记 —— 强制作者显式声明。


8. 进程级安全

8.1 Windows PATH hijacking 防御

// main.tsx
process.env.NoDefaultCurrentDirectoryInExePath = '1';

Windows 特有 —— 防止当前目录 PATH 注入。

8.2 反调试

if ("external" !== 'ant' && isBeingDebugged()) {
  process.exit(1);
}

商业版反调试 —— 阻止调试器分析。

8.3 信任对话框

if (!checkHasTrustDialogAccepted()) {
  // 警告 + 退出
}

未信任目录 警告。

8.4 沙箱

function checkSandboxAutoAllow(command): boolean { ... }

Sandbox 模式 —— 限制 bash 命令可访问范围。


9. 输入处理安全

9.1 信任边界

用户输入 → @ 提及文件读取 → sandbox 校验 → bash 执行
                          路径校验
                          危险检测

多层防御 —— 不依赖单一检查。

9.2 paste 内容

const pastedContents: string[]

paste 内容 可能含恶意代码 —— 走与命令相同的检查。

9.3 文件读取

FileReadTool, MaxFileReadTokenExceededError

token 预算 —— 防止超大文件攻击。

9.4 图片 base64

readImageWithTokenBudget

图片有 budget —— 防内存爆炸。


10. 模型 / API 安全

10.1 tool result 转换

transformResultContent
persistBlobToTextBlock

大 blob 持久化 —— 防止消息超限。

10.2 prompt 注入防御

  • @ 提及内容隔离为独立 message
  • bash 输出引用而非内联
  • system prompt 显式声明

10.3 工具描述截断

const MAX_MCP_DESCRIPTION_LENGTH = 2048

2KB 截断 —— 防 prompt 注入 / token 超限。


11. 配置安全

11.1 settings 多源

loadSettingsFromSources([
  'userSettings', 'projectSettings', 'localSettings', 'policySettings'
])

4 种 settings 源 —— 优先级合并。

11.2 allowedTools / disallowedTools

.option('--allowedTools, --allowed-tools <tools...>')
.option('--disallowedTools, --disallowed-tools <tools...>')

工具白/黑名单 —— 显式权限控制。

11.3 permission-mode

const PERMISSION_MODES = ['acceptEdits', 'bypassPermissions', 'default', 'plan', 'auto']

5 种 permission mode —— 细粒度控制。


12. Hooks 安全

12.1 Hook 来源

  • 内置 hook
  • 用户 settings hooks
  • Plugin hooks

12.2 Hook 执行

runHook(hookName, context): Promise<HookResult>

30s timeout(推测)—— 防止挂起。

12.3 Hook 输出消毒

hook 输出会进 prompt —— 必须信任

12.4 Plugin hook 路径校验

validatePluginPaths —— 防止 ../ 跳出。


13. 凭据存储

凭据 存储 加密
API key (env) env var OS env 隔离
API key (keychain) macOS keychain OS 加密
OAuth token local file filesystem 权限
AWS STS 内存 OS 内存隔离
GCP creds 内存 OS 内存隔离
Plugin secret 用户配置 filesystem 权限

6 种凭据存储 —— 不同方式。


14. 已知风险

14.1 hooks 全权

runHook 没有 sandbox —— 用户自己负责

14.2 Plugin 沙箱

plugin 跑在主进程 —— 没有隔离

14.3 settings 同步

跨设备 sync settings —— 如果设备被入侵会泄露。

14.4 MCP server 信任

MCP server 可以任意注册 tool —— 信任 server。

14.5 信任对话框

用户必须主动 accept —— 不是自动。


15. 防御深度(Defense in Depth)

┌─────────────────────────────────────┐
│  Layer 0: 反调试 + Windows PATH 防御 │  ← OS 层
├─────────────────────────────────────┤
│  Layer 1: 信任对话框 + sandbox      │  ← 用户层
├─────────────────────────────────────┤
│  Layer 2: settings 白/黑名单         │  ← 配置层
├─────────────────────────────────────┤
│  Layer 3: bash validator (25+)     │  ← 工具层
├─────────────────────────────────────┤
│  Layer 4: LLM classifier (投机)    │  ← AI 层
├─────────────────────────────────────┤
│  Layer 5: audit log + telemetry     │  ← 监控层
└─────────────────────────────────────┘

6 层防御 —— 任何一层失守,其他层兜底。


16. 改进建议

16.1 Plugin 沙箱

加 process isolation(Worker thread / subprocess)。

16.2 Hook sandbox

限制 hook 可访问 API。

16.3 settings 同步加密

跨设备 sync 加 E2E 加密。

16.4 MCP server 隔离

MCP server 跑在独立进程。

16.5 完整 audit log

记录所有敏感操作(off by default,可选开)。


17. 关键洞察

17.1 6 大安全面

Bash / MCP / Path / Auth / Settings / Telemetry —— 6 个独立面。

17.2 6 层防御

OS / 用户 / 配置 / 工具 / AI / 监控 —— 任何层失守兜底。

17.3 25+ bash validator

纵深防御 —— 攻击者要绕过所有。

17.4 12 项 OAuth 脱敏

安全细节 —— 错误信息保护。

17.5 命名约定强制

_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS —— 类型级安全。

17.6 反调试 + Windows PATH 防御

OS 层 —— 平台特有。

17.7 已知风险是"商业决策"

hooks / plugin 没有 sandbox —— 用户自己负责

17.8 Trust dialog 主动

不自动 accept —— 用户必须显式信任。


18. 与其他分析的关系

文件 关系
error-handling-overview.md 错误处理 vs 安全
performance-history.md 性能 vs 安全
extensibility.md 扩展点 vs 安全