这是什么:
liuup/claude-code-analysis(2.8k⭐)对同一批 2026-03-31 泄露的 CC v2.1.88 源码做的安全分析 + 竞品对比。这是这套笔记里和别处不重合的两块:CC 到底收你什么、哪里能被攻击、它自己建了哪些防线、怎么把暴露面压到最小、以及和 Codex/Cursor/Aider/Gemini CLI 比怎么样。提醒:第三方从泄露源码分析,非官方,含推断。架构(循环/工具/子代理)见 Claude Code 内部架构(反编译源码级),模型代号/远程开关等内幕见 Claude Code 内幕发现(遥测/代号/卧底/远程开关/路线图)。本机完整源码:
~/projects/开源项目/claude-code-analysis。
一、数据暴露面:最危险的不是遥测,是"进模型的上下文"
大多数人担心隐私只盯着"有没有上传遥测",但对 coding agent 来说,真正最大的泄漏口是每次对话打包发给模型 API 的那坨"工作上下文"。CC 接触你数据分 6 层:
| 层 | 收什么 | 敏感度 | 去哪 |
|---|---|---|---|
| ① 模型上下文(最隐蔽) | 对话+历史+工具执行结果+文件内容+代码片段+git diff+CLAUDE.md+附件+MCP 返回 | 极高 | Anthropic 模型 API |
| ② 本地持久化 | transcript JSONL(逐条对话)+session 元数据+OAuth 凭证缓存+memory 文件 | 高 | 本机磁盘,默认长期留 |
| ③ Memory 长期积累 | 自动从历史提炼的你的偏好/身份/项目事实,每次开聊注入 | 高 | 本机,跨 session 延续 |
| ④ 遥测 | 设备/会话 ID、平台、账户/组织 UUID、订阅级别、仓库 URL 哈希、工具使用统计、文件路径/内容的哈希(非原文) | 中 | Datadog + 1P |
| ⑤ Team Memory 同步 | 团队 memory 目录(可能含内网知识/运维路径/团队规章) | 高 | 启用才有,push 回服务器 |
| ⑥ 主动上传 | transcript 分享 + Grove("帮助改善 Claude",会进模型训练) | 高 | 开了才有 |
类比:你以为风险是"助理偷偷记了笔台账上交"(遥测),其实真正的风险是"助理每次干活,把你桌上摊开的全部文件、屏幕上的代码、刚跑的命令输出,整包念给后台听"(上下文)。台账还做了脱敏哈希,上下文是原文。
核心结论:风险不在某个单点打点,而是"进模型的上下文 + 本地长期 memory + 外部同步"三者叠加形成的信息发散边界。这个边界关不掉遥测也消不掉 —— 是这类产品的结构性特征。
一个工程细节值得记:源码里有个刻意的类型
AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,凡是要上报遥测的字符串,开发者必须手动转换这个类型 = 等于代码里"签字画押:我确认这条不含代码/路径原文"。说明团队有意识防源码进遥测 —— 但这只防遥测那层,防不了①上下文层。
二、攻击面:4 类攻击 + CC 的源码防御
CC 能读文件/网页/MCP 返回、能跑命令,这些能力本身就是攻击入口:
▸ 1. Prompt 注入(含 Unicode 隐写) —— 攻击者在开源仓库注释、网页、MCP 返回里藏指令,你让 CC 读它时被诱导执行恶意操作。更阴的变种:用肉眼看不见的零宽 Unicode 字符( 等)把指令藏进正常文字。
防御:
partiallySanitizeUnicode()—— NFKC 规范化(把"看着像 A 其实是合成字"统一)+ 删零宽/方向欺骗/私有区字符,循环洗到不变为止(最多 10 次)。MCP 返回值递归全洗。(真实漏洞:HackerOne #3086545 就是用零宽字符在 MCP 返回里藏指令。)
▸ 2. Shell 命令注入 —— 诱导模型生成带恶意载荷的命令劫持你的机器。
防御:危险模式黑名单 ——
python/node/bash/eval/sudo/ssh等。如果你配了Bash(python:*)这种宽授权(等于"让 AI 无限制跑任意脚本"=管理员权限),进自动模式前会被临时撤销,退出后恢复。
▸ 3. Git 逃逸(精妙多阶段) —— 在沙盒内伪造一个裸 git 仓库(HEAD/objects/refs)植入恶意 core.fsmonitor 钩子,等你在沙盒外宿主机跑 git log 时触发。
防御:每次沙盒命令跑完,
scrubBareGitRepoFiles()强制扫除沙盒内的 git 裸库文件。
▸ 4. MCP 服务器不可信输入 —— 不受信的 MCP 服务器返回恶意"工具结果"操控 Claude。
防御:Unicode 递归清洗 + 独立 MCP 权限认证 + 沙盒把 MCP 触发的写入限制在白名单路径。
三、防御体系:5 道防线(同心圆)
遥测隐私隔离 + 密钥扫描 ← 数据出境防线
┌─ 权限模式分级管控 ─┐ ← 策略防线
┌──┼ Tool Permission 应用层拦截 ┼──┐ ← 应用防线
│ │ Sandbox 系统级隔离 │ │ ← 底层防线
│ │ Unicode 清洗 / 路径校验 │ │
└──┴────── 宿主机(受保护)──────┴──┘
| 防线 | 怎么做 | PM 该记的点 |
|---|---|---|
| 双重权限闸 | 应用层(弹窗确认)+ 系统层(沙盒),一层破了另一层还在 | 即使 AI 拿到权限,沙盒仍限制它实际能碰什么 |
| Sandbox 沙盒 | Linux/WSL2 用 bubblewrap+namespace 内核隔离;macOS 用原生沙盒。白名单驱动:精确控制哪些路径可读写、哪些域名可访问 | 沙盒内程序"看不到"真正的 ~/.claude/settings.json,改也只改到隔离视图。配置热更新同步,无"旧规则时间窗"逃逸 |
| 权限分级 | default(每次问)→ acceptEdits → plan(只读规划)→ auto(分类器判)→ bypassPermissions(跳过全部,危险) | bypassPermissions 可被企业远程开关或本地设置强制禁用,即使你传 --dangerously-skip-permissions 也被忽略 |
| 密钥扫描 | 内容离开本地前用正则扫 30+ 种凭据(AWS/GitHub PAT/OpenAI/Stripe/PEM 私钥…) | 扫描不返回命中原文(防扫描本身变泄漏渠道);可 redact 成 [REDACTED] 而非直接丢弃 |
| 隐私分级 | default / no-telemetry / essential-traffic 三档 |
PII 字段路由到有访问控制的专属 BigQuery 列,发 Datadog 前 stripProtoFields 脱敏;MCP 工具名上报前替换成通用 mcp_tool(不暴露你的私有 MCP 服务器名) |
工程审美亮点:权限系统是 fail-closed(保守安全)默认 ——
buildTool()里isConcurrencySafe/isReadOnly/isDestructive全默认 false(默认当成"不并发/有副作用/可能破坏"),要明确声明安全才放宽。这是对的安全姿态:默认怀疑,而非默认信任。
总评:CC 绝非零风险(上下文泄漏是结构性的,关遥测也躲不掉),但防御工程做得扎实 —— 双闸/沙盒/密钥扫描/Unicode 清洗/危险规则拦截都有真实源码。对用户最有效的安全措施是控制输入边界(下面 playbook)。
四、隐私最小化 playbook(可操作)
如果你要在 CC 里处理敏感代码/数据,按"网络→落盘→行为"三步压暴露面。只做第 1 步、不做 2/3,隐私收益远低于预期。
▸ 第 1 步:关网络与遥测
DISABLE_TELEMETRY—— 关遥测/analyticsCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC—— 更狠,关一切非必要出网(连自动更新/Grove/release notes 都关)。要"尽量少出网"选这个。
▸ 第 2 步:关落盘与记忆
--no-session-persistence或cleanupPeriodDays: 0—— 不生成可恢复 transcript(也就少了被再拿去做 memory/resume/share 的机会)CLAUDE_CODE_DISABLE_AUTO_MEMORY=1或autoMemoryEnabled: false或--bare—— 关自动记忆,不再积累你的长期画像- 不启用 Team Memory —— 它会监听目录 + pull/push 同步回服务器
- 不启用 Remote/Bridge/Transcript Share —— 都会扩大边界
▸ 第 3 步:管住自己的输入(最关键,关了遥测也救不了乱喂)
- 不在 prompt 里直接贴密钥/token/私钥
- 不把整个
.env、生产配置、客户数据塞进上下文 - 不让 agent 扫含敏感资料的大目录
- 不在开着 Grove 时处理敏感项目
▸ 企业治理(个人习惯不足以收敛,要统一策略):默认关 auto memory + team memory + cleanupPeriodDays:0 + 默认 essential-traffic + 禁 remote/bridge + 用隔离仓库/脱敏镜像/临时 worktree 跑 agent。
一个现实判断:如果你的真实要求是"代码绝不离开本机、不进模型、不留痕迹",这类产品天然不适合当默认工作方式 —— 最接近也只能是
--bare+ 全关 + 严控输入。CC 能"降低暴露面",但不是"零采集优先"架构。
五、竞品对比:CC vs Codex / Gemini CLI / Aider / Cursor
对比基于 2026-03-31 各家官方公开资料。下表是"路线差异",不是"谁更好"。
| 产品 | 一句话定位 | 与 CC 的关键差异 |
|---|---|---|
| Codex(OpenAI) | 覆盖本地+云端的通用 coding agent 平台 | 入口更宽(CLI/IDE/web/app/SDK/Slack)、云端更成熟、更强调统一产品线与企业治理;CC 的 memory 文件化、本地可审计性更强 |
| Gemini CLI(Google) | 高标准的开源 terminal CLI agent 基线 | 已含 built-in tools/MCP/checkpoint/sandbox/trusted folders/telemetry,产品边界更清晰直接;CC 的 memory 分层更深(不止 checkpoint)、agent runtime 更重(teammate/swarm/team memory) |
| Aider | 轻量终端 pair programming | 更轻、repo map+git+lint/test 闭环、脚本化简单;CC 状态管理更复杂(像终端工作台)、平台化能力强(MCP/bridge/swarm/team memory) |
| Cursor | IDE 驱动的远程代理平台 | IDE 主导、background agent 强、远程隔离执行突出;CC 是本地终端内核主导,远程只是扩展层 |
▸ CC 真正的差异化(不是"功能多",而是这三点同时成立,别家多半只占一两点):
- 统一执行内核 —— REPL/headless/子 agent/后台/远程全走同一套
query()主循环,不存在两套实现的行为差异 - 文件化、可审计、分层的 memory —— 记忆是磁盘上能
cat的 Markdown(Auto/Session/Agent/Team 四层各有开关),不是黑盒数据库 - local-first 但能平滑扩到 remote/bridge/swarm
一句话:CC 不是"给 Claude API 套个 CLI 皮",而是一套有独立 query 内核 + 文件化 memory + 主干化权限 + 多 agent runtime 的本地 agent 平台。 选型时:要广覆盖+云端+企业治理看 Codex;要 IDE+后台代理看 Cursor;要极轻量看 Aider;要本地内核+深度记忆+多 agent 协作是 CC 的强项。