就在今天,Claude Code 源码泄露了
发生了什么?
2026年3月31日,也就是今天,一个重磅消息在技术圈炸开了:
Anthropic 的 Claude Code 完整源码,被人从 npm 注册表的.map文件里扒了出来。
这不是什么黑客攻击,也不是零日漏洞。这是 Anthropic 自己犯的一个低级错误——在发布 npm 包时,把用于调试的 source map 文件一起发了上去。
source map 是什么东西?它是 Webpack/Vite 打包时生成的一种映射文件,用来把压缩后的代码还原成原始的源码。对于开发者调试来说,它是标配。但对于 Claude Code 这种商业产品来说,它等同于——把源码直接发给所有人。
消息最初由 @Fried_rice(Chaofan Shou)在 X 上公布:
“Claude code source code has been leaked via a map file in their npm registry!”
几小时后,已经有开发者把完整的源码镜像到了 GitHub:https://github.com/instructkr/claude-code
这不是之前那种”用 AI 反编译 minified 代码”的活。这次的泄露更加直接、更加完整——512,000+ 行 TypeScript 源码,1,900 个文件,全部可见。
源码里有什么?
根据已经分析这些源码的开发者透露,这次泄露的信息量极其惊人:
核心架构一览
| src/ ├── main.tsx # 入口点 (Commander.js CLI 解析器) ├── commands.ts # 命令注册表 ├── tools.ts # 工具注册表 ├── Tool.ts # 工具类型定义 ├── QueryEngine.ts # LLM 查询引擎 (核心 API 调用) ├── context.ts # 系统/用户上下文收集 ├── cost-tracker.ts # Token 成本追踪 │ ├── commands/ # ~50 个斜杠命令实现 ├── tools/ # ~40 个 Agent 工具实现 ├── components/ # ~140 个 Ink UI 组件 ├── services/ # 外部服务集成 ├── screens/ # 全屏 UI (Doctor, REPL, Resume) ├── plugins/ # 插件系统 ├── skills/ # Skill 系统 ├── coordinator/ # 多 Agent 协调器 └── … |
40+ 工具,完整曝光
每个 Claude Code 能调用的工具,都是一个自包含模块,定义了输入模式、权限模型和执行逻辑。全部暴露:
| 工具 | 功能 |
|---|---|
| BashTool | Shell 命令执行 |
| FileReadTool | 文件读取 (图片、PDF、Notebook) |
| FileWriteTool | 文件创建/覆盖 |
| FileEditTool | 文件部分修改 |
| GlobTool | 文件模式匹配搜索 |
| GrepTool | ripgrep 内容搜索 |
| WebFetchTool | URL 内容抓取 |
| WebSearchTool | Web 搜索 |
| AgentTool | 子 Agent 派生 |
| SkillTool | Skill 执行 |
| MCPTool | MCP 服务器工具调用 |
| LSPTool | 语言服务器协议集成 |
| TaskCreateTool | 任务创建 |
| TeamCreateTool | 团队 Agent 管理 |
| CronCreateTool | 定时触发器创建 |
| … | … |
架构亮点:这些设计值得学习
从源码来看,Claude Code 有几个设计非常值得参考:
1. 条件编译:代码体积优化
Claude Code 使用 Bun 的bun:bundle特性做条件编译,未启用的代码在构建时完全剥离:
| import { feature } from ‘bun:bundle’
// Inactive code is completely stripped at build time |
这种设计让不同配置下的产物保持最小化,同时也让代码结构更加清晰。
2. 启动优化:并行预取
启动时间通过并行预取优化——MDM 设置、Keychain 读取、API 预连接都在重型模块评估前作为副作用执行:
| // main.tsx — 在其他 import 之前作为副作用触发 startMdmRawRead() startKeychainPrefetch() |
重型模块(OpenTelemetry、gRPC、analytics 和某些特性门控子系统)通过动态 import() 延迟加载。
3. 工具权限模型:每调用必检
每个工具调用都会检查权限。根据配置的权限模式(default、plan、bypassPermissions、auto 等),要么提示用户确认/拒绝,要么自动解析。
4. 插件与 Skill 双系统
-
SkillTool:执行可复用的工作流
-
plugins/:加载内置和第三方插件
这是让 Claude Code 可扩展性的关键。
不仅仅是源码:还有 System Prompt 泄露
今天泄露的不止源码。
几乎同时,另一个消息在安全圈传开:Claude 的完整 system prompt 也被泄露了,一个 24,000 token 的文档,详细定义了模型的行为模式、工具使用规则、引用格式。
而在此之前,已经有开发者整理了 28+ 个 AI 编程工具的泄露 system prompt,在 GitHub 上积累了 134K stars。
安全警醒:CVE-2026-21852
今天的泄露还让人想起不久前的另一个漏洞:CVE-2026-21852(前几天的 CVE-2025-59536 后续)。
这个漏洞允许恶意仓库在用户确认”信任”之前,就通过配置文件窃取用户的 Anthropic API Key。
问题出在加载流程上:
| // 有问题的顺序 const config = loadConfig() await ensureWorkspaceTrusted() // 信任确认太晚了 // 修复后的顺序 |
只需要在仓库里放一个恶意的.claude/settings.json,把ANTHROPIC_BASE_URL指向攻击者控制的服务器,用户运行claude的第一秒,API Key 就已经发出去了——确认对话框还在后面。
这个漏洞在 2.0.65 版本被修复。但它揭示了一个更严重的问题:你信任的每一个仓库,都可能在你运行 Claude Code 时成为攻击面。
这件事对所有人的意义
对开发者
-
不要在 npm 包里留 .map 文件。这本来是常识,但 Anthropic 犯了。
-
任何客户端代码 = 源码公开。今天是被动泄露 source map,明天是主动反编译。永远不要假设你发出去的代码是”保护的”。
-
小心你 clone 的仓库。配置文件可以成为攻击向量,不要低估供应链攻击。
对 AI 工具使用者
-
了解你的工具能做什么。Claude Code 能读你的文件、跑你的命令、访问你的网络。你在授权什么,心里要有数。
-
API Key 就是钱。泄露一次,攻击者可以拿你的配额刷到破产。
对整个行业
-
源码泄露不再是偶发事件。随着 AI 反编译工具普及,每个商业 CLI、每个前端打包的代码,都可能被逆向。这会改变整个行业对”知识产权”的认知。
-
供应链安全需要重新审视。你依赖的每一个 npm 包,都可能成为攻击面。今天是 Claude Code,明天可能是你的 Jest、你的 ESLint、你的 Webpack。
结语
512,000 行 TypeScript 代码,今天之前还藏在 .map 文件里,今天之后人人可读。
这不是”被黑客攻击”,这是一个本可以避免的配置失误。Anthropic 在 AI 领域是技术最强的公司之一,但在最基本的软件发布流程上,犯了几乎每个前端开发者都会警惕的错误。
讽刺的是,Claude Code 本身就是用来帮开发者发现和修复 bug 的工具。而它自己的源码,因为一个 .map 文件,被一览无余。
代码世界里,没有什么是真正”藏”起来的。
参考资料:
-
GitHub: instructkr/claude-code (源码镜像)
-
GitHub: leeyeel/claude-code-sourcemap
-
@Fried_rice (Chaofan Shou) on X
-
CVE-2026-21852 / GHSA-jh7p-qr78-84p7
-
dev.to: CVE-2026-21852 技术分析
-
Augment Code: Leaked system prompts for 28+ AI coding tools
夜雨聆风