Claude Code 源码泄露事件分析报告:技术细节与防泄密启示
1. 事件概览:一个 .map 文件引爆的秘密
- 发生时间:2026年3月31日
- 核心触发点:Anthropic 在发布
@anthropic-ai/claude-codev2.1.88 到 npm 时,由于打包配置疏忽,不慎包含了 57MB 的cli.js.map文件。 - 后果:暴露了 1900 个 TypeScript/TSX 源码文件,共计 51.2 万行 核心逻辑代码,其中包括大量的内部架构设计、尚未公开的功能以及其专有的 AI 调度引擎。
- 现状:虽已推送更新修复,但源码已被社区镜像,多个 GitHub 仓库已获得上千 Star。
2. 技术起因:一行配置的疏忽
2.1 Sourcemap 的“藏宝图”作用
Sourcemap 是将压缩混淆后的生产代码映射回原始源代码的索引文件。Claude Code 使用 Bun 作为打包工具,而 Bun 默认会生成 sourcemap,除非显式关闭。
2.2 泄露发生的路径
- 工程师失误:Anthropic 工程师显然忘了在生产构建指令中显式关闭 sourcemap,或者未在
.npmignore中排除.map文件。 - 内嵌内容:更致命的是,该 .map 文件不仅包含了映射关系,还直接内嵌了原始源文件的完整内容。
2.3 极其简易的还原方法
开发者仅需三条命令即可“扒光”源码:
# 1. 安装/打包指定版本的包
npm pack @anthropic-ai/claude-code@2.1.88
# 2. 解压
tar -xzf anthropic-ai-claude-code-2.1.88.tgz
# 3. 使用工具提取源码内容
npx source-map-tools extract package/cli.js.map -o ./source3. 核心秘密揭露:1900 个文件背后的深度细节
3.1 核心技术架构
- 运行时环境:Claude Code 运行在 Bun 平台,而非 Node.js。
- 交互层:采用 React + Ink 渲染终端 UI。Ink 让 Claude Code 能像构建 Web 界面一样使用 React 组件构建命令行界面。
3.2 插件化工具引擎 (40+ Tools)
- 采用了模块化的工具系统,包含文件读取、Bash 执行、Web 抓取、LSP(语言服务器协议)集成等 40 多个独立工具。
- 仅工具基础定义就有 2.9 万行 TypeScript 代码,展示了极其复杂的工具编排能力。
3.3 核心未公开功能与内部代号
| 功能代号/名称 | 功能描述 | 细节发现 |
|---|---|---|
| "Chicago" (Computer Use) | 电脑使用模式 | 包含截图捕获、键鼠模拟等。源码中存在一个内部员工绕过开关,允许绕过某些限制。 |
| ULTRAPLAN | 深度思考模式 | 针对复杂规划任务,运行在远程云容器 (CCR) 中,使用 Opus 4.6 模型,单次思考限时 30 分钟。 |
| autoDream | 后台记忆整合 | 以后台 fork 子代理方式运行,在非活跃时间进行交互记忆的整理与巩固。 |
| KAIROS | 始终在线模式 | "Always-on" 模式,保持持续监听能力。 |
| Buddy / Coordinator Mode | 协作与协调 | 伴侣式协作体验及跨代理(Multi-agent)协调器。 |
| Agent Swarms / Workflow Scripts | 集群与脚本 | 揭示了代理集群调度和复杂工作流脚本系统的实现。 |
4. 极致讽刺:无法防住自己的 "Undercover Mode"
源码中包含一个名为 "Undercover Mode" (潜伏模式) 的子系统。
- 该功能初衷:防止 Claude Code 在 git commit、PR 描述等公开场合“说漏嘴”,泄露内部代号、未发布功能或 API。
- 现实反讽:Anthropic 投入精力研发防泄密 AI 系统,却被其工程师一次简单的 打包漏掉 exclusion 规则 给“自爆”了。正如社区评论:“造了一把精致的锁防 AI 泄密,却把锁的设计图纸随保险箱快递给了全球。”
5. 背景:Anthropic 本月的“连环翻车”
- 3月26日:CMS 系统配置错误,导致 3000 多份内部文档公开访问,泄露了未发布模型 Claude Mythos 和 CEO 的行程。
- 3月31日:Claude Code 源码大范围泄露。
- 启示:即便是估值数百亿美元、以“AI 安全”为核心的头部公司,也容易在系统基础配置这些“小坑”里栽跟头。
6. 开发者实操警示:如何防微杜渐
6.1 检查 .npmignore 及其黑名单
确保在发布包时,彻底排除以下文件:
*.map(Sourcemaps)*.ts(除.d.ts声明文件外的原始 TS 源码)src//tests//.env
6.2 显式关闭生产构建 Sourcemap
不同打包工具的配置参考:
| 工具 | 配置/命令方式 |
|---|---|
| Bun | bun build --sourcemap=none |
| Webpack | devtool: false (生产模式配置) |
| esbuild | 不显式指定 --sourcemap 参数 |
| Vite | build.sourcemap: false |
6.3 最佳实践:使用 files 白名单
在 package.json 中使用 files 字段,采用白名单机制,比维护黑名单更稳健。
{
"files": [
"dist/",
"README.md",
"LICENSE"
]
}6.4 发布前的“黄金 10 秒”
发布前强制养成执行 npm pack --dry-run 的习惯。这条命令会列出即将发布的所有内容,花些时间扫一眼,其价值往往超过数万美元。
总结:安全无小事。再精妙的 AI 逻辑,也敌不过一行缺失的配置。10 秒钟的打包检查,可能就是保护公司核心竞争力的最后屏障。