乐于分享
好东西不私藏

Claude Code 源码泄露事件技术分析

Claude Code 源码泄露事件技术分析

Incident Analysis / Cyberpunk Edition

这不是一起传统意义上的“黑客入侵”,而是一次由 npm 打包失误触发的公开制品暴露事件(这里的“制品”主要指对外发布的 npm 包、构建产物和分发文件)。真正的问题,是 cli.js.map 被错误发布进生产包,进而让外界恢复出 Claude Code 的大部分工程源码。

泄露版本:2.1.88恢复规模:约 1900 文件代码体量:约 50 万行

一句话结论: Claude Code 事件说明,AI 产品的高价值资产不仅是模型和数据,工作流编排、提示词结构、记忆机制与工具调用策略,同样可能因一次看似普通的发布失误而整体暴露。

一、事件概述

2026 年 3 月 31 日,Anthropic 在发布 @anthropic-ai/claude-code 的 2.1.88 版本时,误将一个大型 Source Map 文件 cli.js.map 一同发布到 npm。由于该 .map 文件包含可回溯到原始 TypeScript 工程的关键信息,外部研究人员很快重建出 Claude Code 的大部分内部源码。

这次事件最值得关注的,不是传统意义上的“黑客入侵”,而是一个在现代 JavaScript/TypeScript 发布链路中非常常见、但往往被低估的风险点:调试产物进入了生产分发包。Anthropic 对外说明也明确表示,这次是人为导致的发布打包问题,而非外部安全入侵,且未涉及客户敏感数据或凭证泄露。

二、事件时间线

2026-03-31:Claude Code 2.1.88 发布到 npm,并包含异常的 cli.js.map

同日:研究人员 Chaofan Shou 首先公开指出 npm 包中存在可重建源码的 map 文件。

数小时内:社区从该 map 文件中恢复出约 1900 个文件、约 50 万至 51.2 万行 TypeScript 代码,并在 GitHub 等平台传播。

2026-04-01:The Hacker News、TechSpot 等海外媒体集中报道该事件,Anthropic 重申这是打包失误,不是安全入侵。

从传播路径看,这类泄露一旦进入公共注册表,处置窗口往往只有数分钟到数小时。即使后续下架 npm 版本并发起 DMCA,源码镜像通常也已经完成多点扩散,几乎不可能彻底“收回”。

三、技术根因分析

1. Source Map 为什么会导致“接近完整源码泄露”

Source Map 的本意是把编译后的 JavaScript 与原始源码建立映射关系,便于调试。问题在于,很多构建系统不仅会在 .map 中记录路径和行列映射,还可能嵌入 sourcesContent 字段,把原始源码正文直接放进去。这样一来,攻击者甚至不需要逆向,只需要解析 JSON,就能恢复出几乎可直接阅读的源码树。

这次 Claude Code 泄露,本质上就是:

1. npm 包里带上了不该公开的 cli.js.map

2. 该 map 文件中保留了足够多的原始源码信息。

3. 包又被发布到了公开 registry,任何人都能下载。

2. 打包链路为什么容易犯这个错误

npm 默认的打包行为如果没有明确做 allowlist,确实很容易把不该分发的文件一并带进 tarball。同时,.npmignore 与 .gitignore 的配合稍有疏漏,就可能让构建产物、调试文件或内部脚本进入最终发布包。

  • 发布清单没有做 allowlist
  • CI 没对 npm pack --dry-run 结果做阻断
  • 构建产物里存在完整调试映射
  • 发布前没有对 .map、测试工件、内部脚本做二次审计

四、泄露内容边界

1. 发布2.1.88 被发布到 npm,包中意外携带了 cli.js.map

2. 暴露:该 Source Map 中保留了足够多的映射与源码内容,可用于恢复原始 TypeScript 文件。

3. 扩散:研究人员和社区快速重建源码并同步到多个公共镜像仓库。

4. 影响:工作流编排、工具路由、隐藏功能与产品工程细节变得可见。

根据 BleepingComputer、The Hacker News 和 TechSpot 的公开报道,这次暴露的主要是 Claude Code 的工具层、编排层和工作流层源码,包括但不限于:

  • CLI 逻辑与代理式工作流编排
  • 工具调用与 bash / 文件操作等接口封装
  • 多代理协作、上下文管理、记忆系统设计
  • 未公开或实验性功能的开关、提示词和运行模式

但同时也要严格区分边界:当前公开信息并不支持“模型权重泄露”或“客户数据泄露”这两个结论。 这是应用层源码、流程逻辑和产品能力暴露,不是大模型参数本体泄露。

五、安全影响评估

01. 产品可复制性上升

源码泄露直接降低了竞争对手模仿 Claude Code 产品交互和代理工作流的门槛。

02. 攻击者研究成本下降

源码暴露后,攻击者可以直接观察数据如何流入 prompt、如何经过压缩和记忆层、如何触发工具调用。

03. 法务下架并不能消除技术扩散

公共 npm 包一旦发生泄露,扩散速度极快;删除官方版本通常只能阻止继续扩大,无法真正回收已流出的内容。

04. 它暴露了 AI 工具链安全治理的薄弱环节

很多团队把重点放在模型 API、鉴权和数据隔离上,但对构建系统、制品仓库、npm 包发布和调试文件外发重视不足。

六、与 Axios 事件对照

海外报道里经常把 Claude Code 泄露和同期的 Axios npm 投毒一起提到,但两者不能混为一谈:

Claude Code 事件

主因是 Anthropic 自身的打包失误,属于源码暴露与产品逻辑泄露问题。

Axios 事件

则是 维护者账号被控后发布恶意版本,并被用于投递跨平台 RAT 的供应链攻击。

对企业应急来说,正确姿势应该是双线处理:一条线按“源码暴露事件”处理,另一条线按“供应链恶意依赖”处理,不能把它们混在同一个因果链里。

七、团队防护建议

1. 生产发布必须采用 allowlist

不要依赖“默认排除”,而应显式配置 files 字段,只把必须分发的二进制、编译产物和文档带进 npm 包。

2. Source Map 需要分级治理

  • 默认不对公网分发完整 map
  • 如确需保留,优先使用不含源码正文的 nosources-source-map
  • 错误上报平台使用的 map 应存放在受控存储中,而不是直接公开

3. 发布前要自动审计 tarball

在 CI 中强制执行:

  • npm pack --dry-run
  • 检查是否包含 .map、测试目录、源码目录、私有脚本、内部配置
  • 对产物体积异常增长做阻断

4. 把“可公开发布性”纳入安全评审

任何进入包管理器、镜像仓库、CDN、容器镜像或桌面自动更新通道的制品,都应被视为“默认可被外部获取”。安全评审要回答的问题不是“理论上会不会泄露”,而是“如果现在被外部完整下载,是否会暴露不该暴露的内容”。

八、结论

Claude Code 源码泄露事件不是一次传统的入侵事故,而是一次典型的软件供应链发布失误。它揭示的核心问题并不神秘:在 AI 产品高速迭代过程中,团队可能把太多注意力放在模型能力和代理体验上,却低估了 npm 发布、构建产物、调试文件和制品审计这些“老问题”。

从技术角度看,这次事故最值得行业记住的一点是:对 AI Agent 产品而言,真正敏感的不只有模型和数据,工作流编排、提示词结构、记忆机制和工具调用策略同样构成高价值资产。 一旦这些内容通过 Source Map、容器镜像、调试符号或错误制品进入公开分发面,泄露的就不仅是一份代码,而是整套产品方法论。

参考资料

  1. The Hacker News: Claude Code Source Leaked via npm Packaging Error, Anthropic Confirms
  2. BleepingComputer: Claude Code source code accidentally leaked in NPM package
  3. TechSpot: Anthropic accidentally exposed Claude Code source, raising security concerns
  4. MDN: Source map
  5. webpack Docs: Devtool
  6. npm Docs: package.json – files field
  7. The Hacker News: Axios Supply Chain Attack Pushes Cross-Platform RAT via Compromised npm Account