Claude Code 泄露源码被投毒

事件概述
2026 年 3 月 31 日凌晨,Anthropic 在向 npm 仓库推送 Claude Code 2.1.88 版本时,意外将一份 59.8 MB 的 JavaScript source map 文件打包进了公开发行包。这份文件相当于一把万能钥匙——任何人都能用它还原出 Claude Code 的完整 TypeScript 源码:约 1,906 个文件、超过 51.2 万行代码。
安全研究员 Chaofan Shou(X 平台 ID @Fried_rice,Solayer Labs 实习生)在当天凌晨 4:23(美东时间)率先公开了这一发现,帖子迅速获得超过 2,880 万次浏览。几小时内,源码被人从 Anthropic 自家的 Cloudflare R2 存储桶下载,上传至 GitHub 并被大规模 fork。据 Zscaler ThreatLabz 报告,截至分析时点,最热门的镜像仓库已获得超过 84,000 颗星和 82,000 次 fork——这可能是 GitHub 历史上增长最快的仓库之一。
Anthropic 随后承认了这一事件,发言人对 The Register 表示这是「由人为错误导致的发布打包问题,而非安全入侵」,并强调没有客户数据或凭证泄露。公司已从 npm 撤下 2.1.88 版本,直接从 2.1.87 跳到 2.1.89,并通过 DMCA(数字千年版权法案)通知要求 GitHub 下架镜像仓库。
但事态远没有这么简单。这次泄露恰好撞上了另一起重大供应链攻击,而围绕泄露代码的恶意利用已经开始。
泄露怎么发生的
说白了,这是一个构建流程配置遗漏。
Claude Code 使用 Bun 作为运行时和打包工具。Bun 默认会生成 source map 文件(.map 文件),这类文件的作用是在调试时将压缩后的代码映射回原始源码。问题在于,Anthropic 没有在 .npmignore 或 package.json 的 files 字段中排除 *.map 文件。于是,当 2.1.88 版本推送到 npm 时,完整的 source map 一并公开了——而这份 map 文件还引用了一个托管在 Anthropic 基础设施上的完整源码压缩包。
据 VentureBeat 报道,source map 文件中记录的原始 TypeScript 源码可以被完整还原。这不是代码被混淆后的残片,而是带有完整注释、内部变量名和配置信息的原始工程代码。
讽刺的是——据分析人员发现——Claude Code 内部有一个专门的「Undercover Mode」子系统,用于防止 Anthropic 的内部信息在公开代码提交中泄露。也就是说,他们专门建了一套机制来防泄密,结果源码被一个 .map 文件全盘交了出去。
到底泄了什么
据 Zscaler ThreatLabz、The Hacker News 和多个独立分析者的梳理,泄露内容覆盖了 Claude Code 客户端的完整技术栈:
核心架构层面:包括 LLM API 调用逻辑、流式传输、工具调用循环、重试机制、思考/审查模式,以及多 Agent 协调系统。据 GitHub 上的逆向分析,主入口文件 main.tsx 达 785KB,内含自定义 React 终端渲染器和 40 余种工具。
权限与执行层面:Claude Code Hooks(可自动执行 shell 命令的钩子系统)、MCP(模型上下文协议)集成、环境变量处理、项目加载流程。这些正是此前 Check Point 发现漏洞的攻击面。
持久化与状态管理:持久记忆系统、后台 Agent 和自主守护进程。其中一个名为 KAIROS 的功能允许 Claude Code 作为常驻后台 Agent 运行,可以周期性自动修复错误或执行任务,甚至向用户发送推送通知。还有一个「Dream Mode」,让 Claude 在后台持续思考和迭代创意。
隐藏功能与内部信息:据 Engineer’s Codex 分析,代码中包含 44 个 feature flag,其中 20 多个尚未上线。泄露还揭示了内部模型代号——Capybara 对应 Claude 4.6 的一个变体,Fennec 对应 Opus 4.6,而 Numbat 仍在测试中。VentureBeat 报道称,内部注释显示 Capybara v8 的虚假声明率为 29-30%,相比 v4 的 16.7% 反而有所退步。
没有泄露的:模型权重、安全管线和用户数据均未涉及。这是一次客户端代码泄露,不是训练数据或模型参数的泄露。
时间线上的「完美风暴」
这次泄露的时间点堪称灾难性巧合。
就在同一天——3 月 31 日凌晨 00:21 至 03:29 UTC——npm 生态遭遇了一起严重的供应链攻击:广泛使用的 HTTP 客户端库 Axios 的维护者账号被入侵,攻击者发布了两个含有恶意代码的版本(1.14.1 和 0.30.4)。据 Microsoft 威胁情报团队确认,这次攻击由朝鲜关联的威胁行为者 Sapphire Sleet(Google 威胁情报追踪编号 UNC1069)实施。恶意版本注入了一个名为 plain-crypto-js 的伪装依赖,会在安装时自动执行后门脚本,向 Windows、macOS 和 Linux 系统投放跨平台 RAT(远程访问木马)。
据 Elastic Security Labs 分析,攻击者对三个平台分别预置了不同实现但协议完全一致的 RAT 载荷。据 Axios 官方事后分析,攻击者通过针对性社会工程和恶意软件获取了维护者的电脑访问权限,进而获得了 npm 账号凭证。
这意味着:在 3 月 31 日当天通过 npm 安装或更新 Claude Code 的开发者,存在同时拉取到被木马化的 Axios 依赖的风险。恶意版本在线约 3 小时后被撤除,但 Axios 每周下载量超过 1 亿次,即便是短暂的暴露窗口,潜在影响面也极为可观。
两起事件之间没有因果关系——但它们在时间线上的重叠,让当天的 npm 生态变成了一片雷区。
已知漏洞被放大
源码泄露还让此前已修复的 Claude Code 漏洞重新成为关注焦点。
今年 2 月,Check Point Research 披露了两组 Claude Code 漏洞:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
这些漏洞的核心问题在于:Claude Code 的项目级配置文件(.claude/settings.json、.mcp.json)过去被视为无害的元数据,但实际上它们已经成为执行层的一部分。攻击者只需在恶意仓库中放置精心构造的配置文件,开发者克隆并打开该仓库时,Claude Code 就会在用户确认信任之前自动执行恶意命令。
虽然这些漏洞已被修复,但「研判」源码的全面公开让攻击者可以更系统地审计 Claude Code 的权限逻辑和执行路径,发现新的攻击面变得更加容易。Zscaler 在报告中明确指出,拥有完整源码可见性的攻击者能够构造更精准的恶意仓库和项目文件。
恶意利用已经开始
Zscaler ThreatLabz 在监控 GitHub 时发现了一个以「Claude Code 泄露」为诱饵的恶意仓库,发布者为 idbzoomh。该仓库伪装成从 .map 文件重建的 Claude Code 完整源码,README 声称已「解锁」企业功能并取消消息限制。
更危险的是,该仓库在 Google 搜索「leaked Claude Code」时排名靠前,极易被好奇的开发者点击。
仓库的 Releases 区包含一个名为「Claude Code – Leaked Source Code」的 7z 压缩包,内含 ClaudeCode_x64.exe——一个基于 Rust 的投放器。执行后,它会释放两个恶意载荷:
-
Vidar v18.7:一款成熟的信息窃取木马,专门窃取浏览器凭证、加密货币钱包和系统信息 -
GhostSocks:一个网络流量代理工具,可将受害者设备变为攻击者的跳板节点
ThreatLabz 还发现同一攻击者在另一个 GitHub 账号下维护了相同内容的仓库,并且频繁更新恶意压缩包——分析期间在短时间内就观察到两个不同版本的恶意压缩包更新。据 Huntress 报告,类似的 GitHub 恶意投放策略在今年 3 月初就已出现过。
「研判」这类社会工程攻击会持续扩大。Claude Code 源码泄露提供了一个极具吸引力的诱饵——开发者对「免费解锁企业功能」的好奇心会持续被利用。任何声称提供泄露源码可执行版本的仓库都应被视为高风险目标。
参考:https://www.zscaler.com/blogs/security-research/anthropic-claude-code-leak
夜雨聆风