乐于分享
好东西不私藏

就在今天,Claude Code 源码泄露了

就在今天,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
const voiceCommand = feature(‘VOICE_MODE’)
 ? require(‘./commands/voice/index.js’).default
 : null

这种设计让不同配置下的产物保持最小化,同时也让代码结构更加清晰。

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() // 信任确认太晚了

// 修复后的顺序
await ensureWorkspaceTrusted() // 信任确认优先
const config = loadConfig()

只需要在仓库里放一个恶意的.claude/settings.json,把ANTHROPIC_BASE_URL指向攻击者控制的服务器,用户运行claude的第一秒,API Key 就已经发出去了——确认对话框还在后面。

这个漏洞在 2.0.65 版本被修复。但它揭示了一个更严重的问题:你信任的每一个仓库,都可能在你运行 Claude Code 时成为攻击面。


这件事对所有人的意义

对开发者

  1. 不要在 npm 包里留 .map 文件。这本来是常识,但 Anthropic 犯了。

  2. 任何客户端代码 = 源码公开。今天是被动泄露 source map,明天是主动反编译。永远不要假设你发出去的代码是”保护的”。

  3. 小心你 clone 的仓库。配置文件可以成为攻击向量,不要低估供应链攻击。

对 AI 工具使用者

  1. 了解你的工具能做什么。Claude Code 能读你的文件、跑你的命令、访问你的网络。你在授权什么,心里要有数。

  2. API Key 就是钱。泄露一次,攻击者可以拿你的配额刷到破产。

对整个行业

  1. 源码泄露不再是偶发事件。随着 AI 反编译工具普及,每个商业 CLI、每个前端打包的代码,都可能被逆向。这会改变整个行业对”知识产权”的认知。

  2. 供应链安全需要重新审视。你依赖的每一个 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