打开网易新闻 查看精彩图片

2026年3月31日凌晨4:23,安全研究员Chaofan Shou盯着屏幕上的发现,第一反应是确认自己没看错。他刚从npm仓库下载的Claude Code 2.1.88版本里,躺着一个59.8MB的cli.js.map文件——这本该是一份被严格屏蔽的源代码映射文件。

6小时后,这个文件被证明是Anthropic送给全球开发者的一份"开源大礼包"。里面藏着指向Cloudflare R2存储桶的直接链接,解压后是整个Claude Code的专有代码库。一家估值3400亿美元的AI安全公司,用最基础的工程疏忽,完成了一场数字自杀。

一个已知的Bug,一道没写的防火墙

一个已知的Bug,一道没写的防火墙

故事要从Anthropic的技术迁移说起。他们最近把Claude Code CLI从Node.js切到了Bun运行时——一个以速度著称的新晋JavaScript引擎。Bun有个公开记录在案的毛病:默认生成巨型源映射文件,即便在生产环境也照干不误。

源映射文件是开发者的调试拐杖,它把压缩后的生产代码和原始可读代码一一对应。这东西要是流出去,等于把自家房子的结构图纸贴在了小区门口。防范它只需要一行配置:在.npmignore文件里写上*.map,或者dist/*.map。

Anthropic的工程师没写。不是忘了,是整套流程都没设这道检查。当版本2.1.88被推送到公共npm仓库时,59.8MB的源映射文件跟着溜了出去。它像一张藏宝图,箭头直指Anthropic自有的Cloudflare R2存储桶里一个公开可访问的ZIP文件。

Chaofan Shou发现后立刻公开广播。任何运行npm install的人都能下载、解压、阅读整套专有代码。从发现到传播,间隔不到几小时。

代码里的尴尬:用十六进制写"鸭子"的工程师

代码里的尴尬:用十六进制写"鸭子"的工程师

开发者们蜂拥而上,像拆圣诞礼物一样拆解这份意外之财。他们很快发现,Anthropic的代码库远不是外界想象的那般精致。

一段被疯狂转发的代码片段显示,某位工程师为了绕过公司内部CI管道的字符串检查,不得不用十六进制编码写"duck"这个词:

const targetAnimal = String.fromCharCode(0x64, 0x75, 0x63, 0x6b);

0x64、0x75、0x63、0x6b,对应ASCII码的d-u-c-k。不是技术 necessity,是流程逼出来的歪招。当你的安全系统敏感到连"duck"都要拦截,工程师只能用这种方式完成工作。

更扎眼的是一个反复出现的类型定义:

type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS

名字本身就是一份免责声明。开发者在类型名里喊冤,暗示他们被自己的安全审查压得喘不过气。这种命名风格在代码库里大量出现,像一群人在隔音玻璃后面打手势。

这些细节被扒出来后,HackerNews上的讨论从技术漏洞迅速转向组织文化。一家标榜"AI安全"的公司,内部流程却逼着工程师用十六进制写变量名——这个反差比泄露本身更具杀伤力。

藏在编译开关后面的秘密

藏在编译开关后面的秘密

比尴尬代码更敏感的,是几组被编译时标志位(compile-time flags)锁死的未发布功能。开发者们通过分析条件编译逻辑,拼凑出了Anthropic正在测试但从未公开的能力:

• 工具使用沙箱:一套限制AI代理访问本地文件的运行时隔离机制,状态显示为"实验性"

• 自主执行模式:允许Claude在无需用户确认的情况下执行shell命令,默认关闭但代码完备

• 跨会话记忆系统:突破当前对话窗口限制,让AI在多次对话间保持上下文连续性

这些功能的方向本身并不意外——OpenAI和Google都在探索类似能力。但泄露的代码暴露了实现细节:沙箱的边界在哪里、自主执行的触发条件是什么、记忆数据存储在何处。对于竞争对手和安全研究者,这是一份架构白皮书。

最引发争议的是自主执行模式的代码注释。开发者在内部文档里承认该功能"可能被滥用",但推进优先级标记为P0(最高级)。这种 tension 被原封不动地写进了泄露的代码库。

41,500次分叉:删除键追不上的传播速度

41,500次分叉:删除键追不上的传播速度

Anthropic的危机响应在几小时内启动。他们向GitHub提交了超过8,000份DMCA删除通知,要求下架相关仓库。这个数字本身说明了问题的规模——不是几个极客的小范围分享,是平台级的病毒传播。

但数字追不上分叉速度。截至公开报道时,相关代码已被分叉41,500次以上。按照开源社区的惯例,每个分叉都可能被同步到私有仓库、打包成torrent、刻进离线硬盘。GitHub的删除只是让链接变灰,代码早已流入无法追踪的支流。

更棘手的是npm生态的特性。即使Anthropic发布了修正版本2.1.89,2.1.88仍然留在注册表的历史记录里。任何指定旧版本的安装命令都会重新触发泄露。他们无法真正"撤回"一个已经发布的npm包,只能祈祷用户主动升级。

公司发言人在声明中使用了"packaging error"(打包错误)的措辞。这个术语在公关语境里暗示一次性失误,而非系统性漏洞。但安全社区的复盘指向相反结论:从Bun的已知行为、到.npmignore的缺失、到R2存储桶的公开配置,多层防护同时失效。

3400亿估值下的工程债务

3400亿估值下的工程债务

这起事件最刺眼的对比是规模与疏忽的落差。Anthropic是2024-2025年AI赛道最炙手可热的独角兽,累计融资超过76亿美元,估值在泄露前夕达到3400亿美元。他们的Claude系列被定位为"更安全的AI选择",核心卖点是对齐(alignment)研究和可控性。

但安全研究和对齐团队的精密工作,被一条没写的.gitignore规则抵消了。这不是资源问题——配置.npmignore需要5分钟。是流程设计里根本没有这道关卡,或者有人假设"我们不会犯这种低级错误"。

技术 Twitter 上流传着一个尖锐的类比:这就像一家以"防弹安全"为卖点的保险箱公司,被发现仓库大门用的是默认密码"1234"。不是技术打不过对手,是根本没设防。

泄露发生后,Anthropic的竞争对手获得了难得的攻击素材。OpenAI员工在匿名论坛发帖,暗示自家有"更严格的代码审计流程"——尽管几周前他们刚经历过自己的API密钥泄露事件。Google DeepMind的研究员则转发了一条关于"安全文化不能止于论文"的评论。

资本市场的反应相对克制。泄露消息传出后,Anthropic的二级市场估值波动在5%以内,投资者显然更关注其收入增速和模型能力。但多位风投合伙人在私下交流中提到,这起事件会被纳入尽职调查清单:你的构建管道里有没有那行*.map?

行业镜像:当"快速迭代"撞上"基础 hygiene"

行业镜像:当"快速迭代"撞上"基础 hygiene"

Anthropic不是第一家因配置疏忽翻车的科技公司,但可能是代价最高的一家。2023年,丰田因GitHub仓库配置错误暴露了30万客户数据;2024年,Dropbox的签名密钥被发现在前端代码里硬编码。这些案例的共同点是:漏洞简单到令人尴尬,修复也简单到令人愤怒。

AI公司的特殊之处在于攻击面的不对称性。传统软件泄露可能暴露用户数据或商业逻辑,AI公司的代码库则包含训练技巧、对齐策略、安全过滤器的具体实现。这些知识产权的估值以十亿美元计,保护它们的却是几行配置文件。

社区讨论中一个反复出现的主题是"成长痛"。Anthropic在18个月内从研究实验室膨胀为数千人的产品公司,工程文化可能没跟上人员扩张的速度。那位用十六进制写"duck"的工程师,或许正是新旧流程碰撞下的产物。

但同情有限。当一家公司的营销话术强调"负责任地构建AI"时,市场期待的是与之匹配的操作纪律。泄露的代码里那些"I_VERIFIED_THIS_IS_NOT_CODE"的绝望命名,读起来像是对这种期待的讽刺。

事件后续发展中,一个细节被较少提及:Chaofan Shou在公开发现前,曾尝试通过Anthropic的漏洞赏金计划私下报告。他收到的自动回复将源映射泄露归类为"低优先级",建议他改用公开渠道。这个流程故障与代码泄露本身同样值得复盘。

现在,那41,500个分叉的代码库正在全球开发者手里被拆解、分析、再混合。有人从中学习Claude的架构设计,有人寻找可利用的安全漏洞,更多人只是围观一家巨头的尴尬时刻。Anthropic的DMCA通知仍在批量生成,但数字版权法追不上已经散播的比特。

下一次npm install的时候,你会检查下载包里有没有不该存在的.map文件吗?