> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Claude Code 源码泄露事件
- URL: https://www.hubwiz.com/blog/claude-code-leak/
- Published: 2026-04-01T23:23:42.000Z
- Updated: 2026-04-01T23:23:42.000Z
- Description: 2026 年 3 月 30 日，Anthropic 将 Claude Code v2.1.88 发布到 npm。该包是压缩过的——但意外地包含了 .map 文件...
- Author: admin
- Tags: SECURITY, CLAUDE CODE, #Import 2026-10-14 14:41

2026 年 3 月 30 日，Anthropic 将 Claude Code `v2.1.88` 发布到 `npm`。该包是压缩过的——但意外地包含了完整的 `.map` 文件。

Source map 是由 JS/TS 打包工具生成的调试产物。它将压缩后的输出映射回原始源代码、文件结构、注释和内部逻辑。在开发环境中，它是必不可少的。但在已发布的 npm 包中，它就是你的完整源代码重构——任何人都可以通过运行 `npm pack` 或直接浏览注册表获取。无需漏洞利用、无需凭据、无需特殊权限。

安全研究员 Chaofan Shou 于 3 月 31 日约 08:23 UTC 公开指出了这一问题。该帖子累计获得了超过 2800 万次浏览。数小时内，一个重构后的镜像出现在 GitHub 上，超过了 84,000 颗星和 82,000 个 fork。Anthropic 在同一天撤回了该版本。

> "没有敏感的客户数据或凭据被涉及或泄露。这是由人为错误导致的发布打包问题，不是安全漏洞。" —— Anthropic 发言人

![None](https://www.hubwiz.com/blog/content/images/2026/04/1-DTIeqz8uh23n72cQ11u9hQ.png)

## 1、泄露了什么——以及为什么它如此有价值

Source map 揭示了大约 **2,000 个 TypeScript 文件** 和超过 **512,000 行代码**。但原始大小并不是重点。重点是这个系统最终被证明是什么样的。

大多数人以为 Claude Code 只是 Anthropic API 的一个精美的 CLI 封装。泄露的内容展示了一个复杂得多的东西：一个完整的多智能体生产系统，自 2024 年 8 月以来一直在悄然发展，现在被超过 100,000 名开发者使用，并且几乎完全由 AI 生成的代码构建。

## 2、架构

代码库组织成不同的层次：

- **UI 层** — 基于类 React 系统的自定义终端渲染器（`ink/`、`components/`、`screens/`）
- **命令层** — 通过 `Commander.js` 的 CLI 子命令（`commands/`）
- **智能体与编排层** — 多智能体协调、子智能体生成、任务队列（`coordinator/`、`tasks/`）
- **工具层** — 模块化功能：文件读写、bash 执行、Web 搜索、MCP 集成（tools/）
- **服务层** — API 调用、压缩、OAuth、遥测（`services/`）
- **基础设施层** — 连接 IDE 扩展的桥梁、状态管理、会话持久化（`bridge/`、`state/`）

这不是演示。这是一个带有熔断器、重试逻辑、优雅关闭处理和企业级安全实践的生产系统——全部运行在你的终端中。

## 3、工具系统

Claude Code 拥有的每一项功能都实现为一个独立的工具，每个工具都有自己的提示词、输入模式和执行逻辑。泄露的代码清楚地展示了每个工具如何向模型描述、它需要什么权限，以及结果如何反馈到上下文中。这包括：

- `BashTool` — 包含 2,593 行 shell 注入防御代码
- `FileReadTool`、`FileWriteTool`、`FileEditTool`
- `GlobTool`、`GrepTool` — 用于代码库导航
- `AgentTool` — 用于生成子智能体
- `WebFetchTool`、`WebSearchTool`
- 用于外部工具服务器的 MCP 客户端集成

## 4、内存与上下文系统

最有价值的技术披露之一是 Claude Code 如何在长时间会话中管理上下文。系统使用四阶段上下文管理流水线来处理模型的固定上下文窗口：

- 原始消息累积
- 选择性压缩——总结较早的对话轮次，同时保留关键状态
- 内存注入——从之前的会话中重新插入相关上下文
- 溢出处理——当接近限制时优雅降级

`CLAUDE.md` 层级结构也有文档记录：来自 `/etc/claude-code/CLAUDE.md` 的全局指令，来自 `~/.claude/CLAUDE.md` 的用户级指令，来自 `CLAUDE.md` 和 `.claude/rules/*.md` 的项目级指令，以及来自 `CLAUDE.local.md` 的私有项目指令。这种多层内存系统使得 Claude Code 能够跨会话和项目保持一致的行为。

## 5、内部提示词与未发布功能

每一个系统提示词现在都是公开的。这不仅包括主要的助手提示词，还包括特定工具的提示词、子智能体的提示词，以及控制 Claude Code 在不同模式下行为的提示词。对于一个部分依赖于精心调优的模型行为的产品来说，这些提示词被完整记录和可复现是意义重大的。

> **未发布功能**

几个从未公布的特性现在都有完整的文档：

- **KAIROS** — 一个持久的后台智能体模式，可以自主运行任务、无需等待用户输入即可修复错误，并发送推送通知。
- **Dream Mode** — 持续的后台推理模式，旨在独立开发和迭代想法。
- **Undercover Mode** — 最受讨论的发现。一个系统提示词指示工具："你正在 `PUBLIC/OPEN-SOURCE` 仓库中以 `UNDERCOVER` 模式运行。你的提交信息、PR 标题和 PR 描述 `MUST` `NOT` 包含 `ANY` Anthropic 内部信息。不要暴露你的身份。"
- **反蒸馏污染** — 如果竞争对手试图抓取 Claude Code 输出来训练自己的模型，这些控制会在 API 响应中注入虚假的工具定义。

> "你正在 `PUBLIC/OPEN-SOURCE` 仓库中以 `UNDERCOVER` 模式运行。你的提交信息、PR 标题和 PR 描述 `MUST` `NOT` 包含 `ANY` Anthropic 内部信息。不要暴露你的身份。"

## 6、安全后果

这次泄露比简单的知识产权披露更为严重。

AI 安全公司 Straiker 指出，攻击者现在可以精确研究数据如何流经 Claude Code 的内部上下文管道，并专门制作能够存活于上下文压缩的载荷——有效地在任意长的会话中持久存在。当架构被完全文档化后，不再需要盲目的越狱尝试。

泄露还暴露了从未打算公开的内部依赖名称——在披露后数小时内，直接引发了 npm 上的仿冒攻击活动。

## 7、为什么这种事情不断发生

三个流程漏洞使这次泄露成为可能——并让它发生了两次：

1. **没有发布前 CI 检查** — 检测构建输出中是否存在 source map 是轻而易举的事情，但之前并没有检查。
2. **过度依赖代码压缩** — 代码压缩可以混淆代码，但不是安全边界。Source map 会完全还原它。将压缩视为保护层是一个错误的假设。
3. **没有内部包名保留** — 暴露的依赖名称未在公共 npm 注册表中注册，使它们可以立即被恶意行为者抢注。

## 8、如何防止这种情况

Claude Code 泄露并非罕见的失败。它是一个广为人知的风险，会影响任何发布 JS/TS 包的团队。好消息是：这个失败的每一层都有直接的解决方案。

**1\. 在打包工具级别排除 Source Map**

第一道防线是配置。每个主流打包工具都支持排除 source map：

```
// esbuild
{ "sourcemap": false }

// tsconfig / tsc
{ "sourceMap": false }

// rollup
{ "sourcemap": false }

// webpack
{ "devtool": false }

// vite
// vite.config.ts
build: { sourcemap: false }

```

对于在开发期间内部需要 source map 但在发布输出中不需要的包，使用构建配置文件——一个用于本地开发（启用 source map）的配置，另一个用于生产（禁用 source map）的独立配置。

**2\. 添加发布前 CI 检查**

配置可能会漂移。人们会忘记。构建工具会变化。一个 CI 门控，如果检测到 source map 就主动使发布步骤失败，可以将配置设置转变为硬性保证：

```
# 如果在 dist/ 目录中发现任何 .map 文件，使发布失败
if find dist/ -name "*.map" | grep -q .; then
  echo "ERROR: sourcemap files found in dist/. Aborting publish."
  exit 1
fi

```

将此作为发布流水线中的一个步骤，在 `npm publish` 运行之前执行。它无需任何成本，就能捕获导致整个事件的错误类型。

**3\. 使用 `.npmignore` 或 `package.json` 中的 `files` 字段**

即使 source map 在构建步骤中漏掉了，你也可以完全防止它们被包含在发布的包中。有两种方式：

**选项 A — `.npmignore`：**

```
# .npmignore
dist/**/*.map
*.map

```

**选项 B — `package.json` 中的显式 `files` 允许列表（推荐）：**

```
{
  "files": [
    "dist/**/*.js",
    "dist/**/*.d.ts",
    "README.md"
  ]
}

```

`files` 允许列表比 `.npmignore` 更安全，因为它使用显式的包含模型——只有你列出的内容才会被发布。默认情况下，其他所有内容都被排除。你不可能意外包含你不想发布的文件。

**4–6\. 供应链安全基础**

- **发布前审计：** 运行 `npm pack --dry-run`（或解压 tarball）以验证将要发布的确切文件——source map 永远不应该被包含。
- **保留内部包名：** 在 npm 上发布空的占位符包，以防止在内部名称泄露时被仿冒。
- **自动化依赖监控：** 使用 `npm audit`、CI 中的锁文件检查、Dependabot/Renovate 和完整性检查等工具，以快速检测受损的依赖。

## 9、结束语

一个缺失的 CI 检查导致了 AI 领域最受关注的开发者工具之一的完整源代码泄露。镜像是永久性的。未发布功能现在已被记录。内部架构是公开的。

修复很简单。失败是系统性的。下游后果——仿冒攻击活动、越狱攻击的更清晰攻击面、竞争对手获得的蓝图——将比事件本身更持久。

---

原文链接: [Claude Code Leak](https://medium.com/@onix%5Freact/claude-code-leak-d5871542e6e8?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处