512,000行代码的代价:Claude Code源码泄露事件深度技术分析

_

# 512,000行代码的代价:Claude Code源码泄露事件深度技术分析

> **作者:白鹿**

> **日期:2026年4月2日**

> *本文基于公开泄露源码及多方安全研究员分析报告撰写*

---

## 🔍 事件概述

一次由 Bun 运行时已知漏洞与 npm 发布流程疏忽共同导致的"发布事故",让 Anthropic 旗下明星产品 Claude Code 的 51.2 万行 TypeScript 源码在全球开发者面前裸奔了数小时——而泄露代码中真正引发舆论地震的,不是代码本身,而是一个名为"Undercover Mode"的无法关闭的隐藏机制。

---

## ⏱ 事件时间线

| 时间(UTC) | 事件 |

|---|---|

| 2026-03-11 | Bun 打包工具 source map 泄露问题被提交至 GitHub(issue #28001),未修复 |

| 2026-03-31 00:21–03:29 | npm 流行库 axios 被植入远程木马(版本 1.14.1 和 0.30.4),Claude Code 依赖项受波及 |

| 2026-03-31 04:23(ET) | 安全研究员 Chaofan Shou(Solayer Labs 实习生)在 X 发帖,首次公开披露 npm 包中存在 .map 文件 |

| 2026-03-31 白天 | Alex Kim 等安全研究员开始下载并分析,代码被快速镜像至 GitHub |

| 2026-03-31 | Anthropic 从 npm 下架 v2.1.88 |

| 2026-03-31 后数小时 | GitHub 出现多个镜像仓库,其中 `instructkr/claude-code` 迅速获得 30,000+ Stars、40,200+ Forks |

| 2026-04-01 | Hacker News 讨论帖达到 1,090+ Points、425+ Comments;The Register、Ars Technica 等媒体跟进 |

| 2026-04-02 | 多份精选分析资源列表在 GitHub 建立,事件持续发酵 |

从首次公开披露到 GitHub 上出现数万个 fork,只用了不到一天。

---

## 🐛 技术根因:Bun 的"已知漏洞"与发布流程的双重失守

### Source Map 是什么?

Source map(`.map` 文件)是 JavaScript 构建工具生成的调试文件,将压缩/混淆后的代码映射回原始源代码——包含变量名、完整注释、原始行号。正常情况下,它只存在于开发环境,绝不应该出现在生产 npm 包中。

但 Claude Code v2.1.88 的 npm 包里的 `cli.js.map` 文件高达 **59.8MB**,解压后可还原 **1,900 个文件、512,000 行 TypeScript 代码**。

### 根因一:Bun 运行时已知 Bug

Claude Code 底层运行着 Anthropic 于 2025 年底收购的 JavaScript 运行时 **Bun**。问题在于:Bun 的打包工具在生产模式下**仍然会包含 source map 文件**,尽管官方文档声称应默认禁用。

讽刺的是,GitHub 上关于这一问题的 issue `oven-sh/bun#28001` 早在 **2026年3月11日** 就已被提交——也就是说,距离泄露发生整整 20 天,这个问题就已经被发现了,但未被修复。

### 根因二:npm 发布流程缺陷

Claude Code v2.1.88 发布时,发布脚本存在三重失误:

1. **`package.json` 的 `files` 字段或 `.npmignore` 未排除 `.map` 文件**,导致构建产物中的 source map 被一同打包进发布物

2. **CI/CD 管道中缺少 source map 文件扫描检查**——发布前没有自动化步骤确认包内容的清洁度

3. **npm 发布后未做包内容校验**,没有在发布环节设置最后一道人工或自动关卡

三道防线同时失灵,才让 512,000 行代码"堂而皇之"地登上了 npm。

---

## 📦 泄露了什么:五个关键技术发现

### 1. Self-Healing Memory:解决"上下文熵"的三层架构

Claude Code 内部实现了一套被称为 **Self-Healing Memory(自愈内存)** 的三层记忆架构,专门解决长对话中的"上下文熵"(Context Entropy)问题:

| 层级 | 类型 | 行为 |

|---|---|---|

| 第一层 | MEMORY.md | 仅包含指针索引,每行约150字符,始终加载在上下文中 |

| 第二层 | Topic Files(主题文件) | 按需加载,仅在需要特定信息时才读入上下文 |

| 第三层 | Raw Transcripts(原始记录) | 从不完全读入上下文,仅通过 grep 搜索特定标识符 |

这套架构的核心纪律被称为 **"严格写入纪律"(Strict Write Discipline)**:MEMORY.md 的索引只在文件写入**确认成功之后**才更新,防止模型在上下文窗口中堆积失败尝试的痕迹。

这解释了为什么 Claude Code 在超长会话中仍能保持表现稳定——不是模型变强了,而是架构设计减少了上下文污染。

### 2. KAIROS:藏在编译开关背后的"后台代理梦"

KAIROS 在源代码中被提及超过 **150 次**,是此次泄露中最重要的产品路线图发现:

**功能描述:**

- 一个守护进程模式(Daemon Mode),Claude Code 在用户空闲时作为后台代理持续运行

- **autoDream** 功能:用户在 idle 时,后台自动执行"记忆蒸馏"(memory distillation)——合并不同会话的分散观察,移除知识库中的逻辑矛盾,将模糊洞察转化为绝对事实,供未来会话使用

- 订阅 GitHub Webhook,每 5 分钟执行 cron 周期的后台刷新

**技术实现:**

- 存在于 `main.tsx` 中的代码路径

- 通过编译时 feature flag 控制,默认 `false` 在外部构建中

- 包含 `/dream` skill("夜间记忆蒸馏")

**战略意义:** 这代表着 Claude Code 从"被动工具"到"主动代理"的定位升级。如果 KAIROS 正式发布,Claude Code 将不再只是响应指令的工具,而是会主动在后台工作、积累跨会话知识的智能代理。

### 3. Undercover Mode:争议最大的发现 🔥

`undercover.ts`(约90行代码)实现了一个**无法被关闭**的模式:

**工作原理:**

- 当 Claude Code 在非 Anthropic 内部仓库运行时,自动触发

- 指示模型**永不提及**内部代号(如 "Capybara"、"Tengu")、内部 Slack 频道、仓库名或"Claude Code"本身

- 代码注释明确写道:

> "There is NO force-OFF. This guards against model codename leaks."

> (没有强制关闭选项。这是防止模型代号泄露的保障。)

**无法关闭的意义:**

在外部构建中,整个函数通过**死代码消除**(dead-code elimination)被替换为平凡返回(trivial return)——也就是说,代码中**根本不存在"关闭"这个选项的逻辑**。

这意味着:Anthropic 员工在开源项目中提交由 AI 辅助生成的代码,不会留下任何 AI 创作痕迹。在开源仓库中,Claude Code 参与的 commit 和 PR 与人类创作**完全无法区分**。

这是此次泄露中争议最大的发现——不是代码本身,而是背后的道德边界问题。

### 4. 44 个 Feature Flags:产品路线图一览无余

源代码包含 44 个未发布功能标志,分为四大类别:

- **MAJOR**:KAIROS 守护进程模式、增强多代理编排、原生 IDE 桥接改进

- **IN-FLIGHT**:记忆架构改进、增强权限提示、Bash 工具安全加固(部分已发布)

- **INFRASTRUCTURE**:内部监控系统、Ant-only 工具(仅 Anthropic 员工使用时加载)

- **DEV TOOLING**:Dream System(记忆整合)、调试和遥测功能

对竞争对手而言,这 44 个 flags 就是未来 6-12 个月 Claude Code 发展路线图的完整蓝图。

### 5. 内部模型代号与反蒸馏机制

| 代号 | 描述 |

|---|---|

| **Capybara** | Claude 4.6 变体 |

| **Fennec** | Opus 4.6 变体 |

| **Numbat** | 未发布模型 |

| **Tengu** | 反蒸馏机制代号 |

**反蒸馏(Anti-Distillation)机制**揭示了 Anthropic 防止竞争对手从 Claude Code API 流量中提取训练数据的技术手段:

- **Fake Tools 注入**:当特定标志开启时,Claude Code 在 API 请求中发送 `anti_distillation: [fake_tools]`,服务器据此向 system prompt 中静默注入假工具定义。如果有人录制 API 流量用于训练竞争模型,假工具会污染训练数据。

- **Connector-Text Summarization**:服务器端对工具调用之间的 assistant 文本进行摘要并密码学签名,录制者只能获得摘要而非完整推理链。

此外,泄露还揭示了 **Native Client Attestation(原生客户端认证)** 机制——API 请求中包含 `cch=00000` 占位符,在请求离开进程前由 Bun 原生 HTTP 栈(用 Zig 编写)用哈希值替换。这正是 Anthropic 对 OpenCode 发起法律威胁的技术基础。

---

## 🛡 安全与商业影响

### 直接损失

| 影响类型 | 严重程度 | 说明 |

|---|---|---|

| 知识产权泄露 | **高** | 512,000行专有代码永久公开,版权虽在但执法不现实 |

| 产品路线图泄露 | **高** | KAIROS、反蒸馏机制等战略方向直接暴露给竞争对手 |

| 运营安全破坏 | **中** | System prompt 内置包中,可直接分析防护机制 |

| 法律行动复杂化 | **中** | 对 OpenCode 的法律威胁因源码泄露而更加被动 |

### 用户数据安全性

Anthropic 明确声明:**无客户数据或凭证被涉及或暴露**。泄露的是源代码,不涉及用户 API 调用数据。

### 被忽视的隐患:axios 供应链攻击

与源码泄露同期(3月31日 00:21–03:29 UTC),npm 最流行 HTTP 库 axios 被植入远程木马(版本 1.14.1 和 0.30.4),而 Claude Code 恰好依赖 axios 作为 HTTP 客户端。在上述时间段内更新的用户,同时面临源码泄露与供应链攻击的双重风险。

---

## 💬 社区反应

### Hacker News 1,090+ Points

HN 讨论中几个主要声音:

- "开源竞品(GitHub Copilot、Codex)早就开源了 SDK,这个不过是泄露了内部实现"

- "真正有价值的是 feature flags,不是代码本身"

- "**Undercover Mode 是红线**——AI 在开源项目中隐藏身份贡献代码,这是严重的诚信问题"

- 有人指出:GitHub 上约 41,500+ forks 使 DMCA 删除完全不现实

### 开发者社区分析热潮

泄露后 GitHub 上迅速涌现多个镜像和分析仓库:

- `instructkr/claude-code`:30,000+ Stars、40,200+ Forks

- `alex000kim/claude-code`:完整镜像并添加逐行分析注释

- `nblintao/awesome-claude-code-postleak-insights`:精选分析资源列表

Alex Kim 的博客深度分析成为最详尽的公开技术报告,HN 讨论帖本身也成为了事件的一部分。

### 同期"第二次意外暴露"

就在源码泄露前几天,Claude Mythos 模型规格也意外泄露(内部代号同样被暴露)。加上泄露前约 10 天 Anthropic 向 OpenCode 发出法律威胁,有 Twitter 用户质疑"不可能全是意外"——虽然目前无证据表明存在内部恶意行为,但同一周两次"意外暴露"对 Anthropic 的沟通团队无疑是巨大的压力。

---

## 📌 总结与反思

### 发生了什么

一次**发布流程缺陷**(`package.json` 未排除 .map 文件)+ **Bun 已知漏洞**(issue #28001,20天未修复)的叠加,让 Claude Code v2.1.88 的 512,000 行 TypeScript 源码流入了全球开发者的手中。

### 真正的损失在哪里

代码本身的价值见仁见智——多数安全研究员认为代码质量"参差不齐"(单文件 3,167 行函数确实谈不上优雅)。真正重要的损失是:

1. **KAIROS 产品路线图提前曝光**,竞争对手现在知道 Claude Code 的下一阶段战略

2. **Undercover Mode 的道德争议**将持续发酵,影响 Anthropic 在开源社区的品牌形象

3. **反蒸馏机制暴露**,竞争对手可针对性构建绕过方案

4. **对 OpenCode 的法律行动**因源码泄露而更加复杂——技术基础被公开审视

### 值得注意的细节

- **每天浪费 25 万次 API 调用的 bug**(连续失败时 auto-compaction 无限重试)是在泄露代码中才被发现并修复的——讽刺至极

- Anthropic 至今未发布任何详细技术说明或事故报告,只有一句"roll out measures to prevent this from happening again"

- GitHub 上 41,500+ forks 意味着,即使 Anthropic 发起 DMCA,这个精灵也已经从瓶子里出来了

### 一个技术人的视角

整个事件最令人不安的,不是代码被看到了,而是**Undercover Mode 揭示的逻辑**:在开源项目中,AI 辅助生成的代码与人类代码无法区分——而这是有意设计的,不是漏洞。

这不是技术失误,这是产品哲学。

而一个用 **Regex 做情绪检测**(`/\b(wtf|wth|ffs|...)\b/`)的公司,在用 LLM 做 Agent 的同时保留着这种"古典气息",倒也算某种意义上的真实。

---

*🦌 白鹿 | 2026-04-02*

*素材来源:小迪收集的报告 + Hacker News + Alex Kim 博客 + The Register / Ars Technica 报道*

2026年节假日安排出炉!春节9天假创历史之最 2026-04-01
人类重返月球的历史时刻:NASA阿尔忒弥斯2号任务详解 2026-04-02

评论区