2026 年 3 月 31 日,安全研究员 Chaofan Shou 在 X(原 Twitter)上发布了一条震动 AI 行业的推文:Anthropic 刚刚发布的 Claude Code npm 包 v2.1.88 中,意外包含了完整的 .map(Source Map)文件,任何人都可以直接读取约 2,000 个 TypeScript 文件、总计超过 51.2 万行的完整源代码。这不是系统提示词泄露,而是整个产品的源代码暴露。
事件经过:一个已知 Bug 的连锁反应
泄露的根本原因被追溯到一个 Bun 的已知 Bug。Anthropic 于 2025 年底收购了 JavaScript 运行时 Bun,而 Claude Code 正是基于 Bun 构建的。Bun 的 GitHub Issue #28001(2026 年 3 月 11 日提交)记录了一个问题:即使将 development 设置为 false,生产模式下仍会包含 Source Map 文件。
讽刺的是,Anthropic 自己拥有的工具链中的已知缺陷,最终导致了自家旗舰产品的源代码泄露。
Anthropic 的官方声明称这是「人为失误导致的发布打包问题,而非安全漏洞」,并对 npm 上的 v2.1.88 版本执行了 deprecate 操作。然而他们使用的是 npm deprecate 而非 npm unpublish——社区戏称「大概是 Claude Code 自己跑了错误的命令」。最终 npm 官方在 Anthropic 的请求下手动移除了该包。
但为时已晚。源代码在数小时内被镜像到多个 GitHub 仓库并被大量 Fork,专门的分析网站 ccleaks.com 和可视化指南 ccunpacked.dev 迅速上线。
泄露揭示了什么
反蒸馏机制:用假工具毒化竞争对手
在 claude.ts 文件的第 301-313 行,一个名为 ANTI_DISTILLATION_CC 的标志控制着一个精巧的防御机制:向 API 请求中注入 anti_distillation: ['fake_tools'],指示服务端在系统提示中混入虚假的工具定义。目的是:如果竞争对手记录 API 流量用于训练,这些假数据将污染他们的模型。
另一个机制通过带密码签名的服务端文本摘要来隐藏完整推理链,防止中间人攻击提取思维过程。但安全研究者指出,这两种机制都可以通过 MITM 代理、设置环境变量 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS,或使用第三方 API 提供商轻松绕过。

隐身模式:AI 的「卧底」行动
undercover.ts(约 90 行)实现了一个令人不安的功能:在公开或开源仓库中运作时,指示模型「你正在公开仓库中以卧底身份运作……不要暴露你的身份」。该模式会阻止提及任何 Anthropic 内部代号(如「Capybara」和「Tengu」)、内部 Slack 频道,甚至「Claude Code」这个名字本身。
关键问题在于:这个模式只有强制开启,没有强制关闭。这意味着 Anthropic 员工在开源项目中使用 AI 提交的代码,将不会有任何 AI 参与的标识——而许多开源项目已经明确禁止未声明的 AI 生成代码。
KAIROS:未发布的自主代理模式
遍布代码库的 Feature Flag 揭示了一个名为 KAIROS 的重大未发布功能——一个始终运行的后台自主代理,包括:
/dream指令用于「夜间记忆蒸馏」- 每日追加日志
- GitHub Webhook 订阅
- 后台 Daemon Worker
- 每 5 分钟的 Cron 定时刷新
- 自动将长时间运行的 Bash 命令转入后台(不通知用户)
这些功能暗示了 Anthropic 正在构建的下一代产品方向:从被动的编码助手走向主动的自主代理。
原生客户端认证:API 调用的 DRM
system.ts 文件揭示了一个精密的认证机制:API 请求中包含一个 cch=00000 占位符,由 Bun 的原生 HTTP 层(用 Zig 编写)在 JavaScript 运行时之下覆写为计算的哈希值。这从密码学层面证明请求来自真正的 Claude Code 客户端。
这一机制的实际意义在于锁定 API 访问——与 Anthropic 此前向第三方工具发送法律威胁函的行动直接相关。
隐私争议:比 Microsoft Recall 更甚?
The Register 的深度分析引发了最广泛的担忧。泄露代码显示 Claude Code 的数据收集范围远超预期:
- 持久遥测:每次启动都发送用户 ID、会话 ID、邮箱、平台、终端类型、组织 UUID
- 远程管理设置:服务端可以推送策略变更、设置环境变量(包括
LD_PRELOAD和PATH),支持热重载 - autoDream 服务:扫描所有 JSONL 会话记录,提炼记忆并注入未来的系统提示
- Team Memory Sync(未发布):双向同步到
api.anthropic.com/api/claude_code/team_memory - 实验性 Skill Search(仅限内部员工):可下载并执行远程 Skill 定义——理论上的远程代码执行路径
社区将此与 Microsoft Recall 类比:Claude Code 读取的每一个文件、执行的每一条命令、进行的每一次编辑,都以明文 JSONL 格式存储,并可能被上传用于模型改进。
代码质量侧写
泄露也暴露了一些工程层面的问题:
print.ts长达 5,594 行,其中一个函数runHeadlessStreaming横跨 3,167 行、12 层嵌套、约 486 个分支点- 使用了 Axios 进行 HTTP 请求——巧合的是,Axios 刚刚在 npm 上被植入恶意 RAT 后门
- 包含 23 项编号的 Bash 安全检查,防御 Zsh 等号展开、Unicode 零宽字符注入和 IFS 空字节注入
userPromptKeywords.ts使用正则表达式检测用户沮丧情绪(如wtf、ffs等),被评论为「一家 LLM 公司竟然用正则做情感分析」
此外还有一个彩蛋:buddy/companion.ts 实现了一个电子宠物系统,含 18 种物种、稀有度分级、1% 闪光概率和 RPG 属性(如 DEBUGGING 和 SNARK)。
行业影响与反思
这次事件的影响远超「一次打包失误」:
竞争情报泄露:Feature Flag 暴露了完整的产品路线图。正如分析者所言:「代码可以重构,Feature Flag 才是真正的问题。」
供应链安全警示:Anthropic 自己拥有的工具链中的已知 Bug 导致了泄露——这对所有依赖自研工具链的公司都是一个警示。
开源伦理质疑:隐身模式直接挑战了开源社区对 AI 参与透明度的要求。
混淆非安全:有分析指出,AI 可以反混淆任何 Minified JavaScript,Source Map 泄露只是让过程更简单——代码对有决心的对手早就是可获取的。
信任成本:对于一家以「AI 安全」为核心品牌的公司,这次事件的声誉代价可能远大于技术损失。
总结
Claude Code 源代码泄露事件是 AI 工具时代的一个标志性事件。它不仅暴露了一个产品的内部架构,更揭示了 AI 工具与用户之间信任关系的脆弱性。从反蒸馏到隐身模式,从自主代理到深度遥测,泄露内容勾勒出了一个远比公开文档描述的更为复杂的系统。
对于开发者而言,这次事件至少留下了两个教训:第一,检查你的构建产物——生产包中不应包含 Source Map;第二,在选择 AI 编码工具时,了解它在后台做了什么,可能和它帮你写了什么代码一样重要。
评论