Claude Code 源码泄露事件技术分析
Incident Analysis / Cyberpunk Edition

这不是一起传统意义上的“黑客入侵”,而是一次由 npm 打包失误触发的公开制品暴露事件(这里的“制品”主要指对外发布的 npm 包、构建产物和分发文件)。真正的问题,是 cli.js.map 被错误发布进生产包,进而让外界恢复出 Claude Code 的大部分工程源码。
一句话结论: 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、容器镜像、调试符号或错误制品进入公开分发面,泄露的就不仅是一份代码,而是整套产品方法论。
参考资料
-
The Hacker News: Claude Code Source Leaked via npm Packaging Error, Anthropic Confirms -
BleepingComputer: Claude Code source code accidentally leaked in NPM package -
TechSpot: Anthropic accidentally exposed Claude Code source, raising security concerns -
MDN: Source map -
webpack Docs: Devtool -
npm Docs: package.json – files field -
The Hacker News: Axios Supply Chain Attack Pushes Cross-Platform RAT via Compromised npm Account
夜雨聆风