![]()
2026年3月31日凌晨4:23,安全研究员Chaofan Shou(@Fried_rice)在推特上敲下一行链接时,Anthropic的工程师们还在睡觉。6小时后他们醒来,发现自家保险柜的门大敞着——不是被黑客炸开,是他们自己忘了锁。
那扇"门"是一个59.8MB的文件,叫cli.js.map。它混在Claude Code CLI 2.1.88版本的npm包里,被全球开发者随手下载。里面藏着Anthropic的完整源代码、未发布功能,以及足够让竞争对手抄三年的工程秘密。
3400亿美元估值的AI安全标杆,栽在了一个初中级工程师都该知道的配置项上。
59.8MB的"地图",把王宫画成了公开景点
Source map(源映射文件)是前端工程的基础概念。你把代码压缩成乱码上线,但调试时需要知道第47行报错对应原始文件的哪个位置——source map就是那张对照表。生产环境必须剔除,这是行业共识,就像出门要关灯一样基础。
Anthropic最近把Claude Code CLI从Node.js迁移到了Bun运行时。Bun有个已知bug:默认生成巨型source map,且不会自动排除。Anthropic的工程师要么不知道,要么没检查,在.npmignore文件里漏写了两行:
# Standard security practice for npm packaging*.mapdist/*.map
就这两行。没有技术难点,没有边缘案例,没有"当时我们面临两难抉择"的悲情叙事。纯疏忽。
这个59.8MB的地图文件里,有一条链接指向Anthropic自有的Cloudflare R2存储桶。不需要社会工程学,不需要0day漏洞,不需要 nation-state 级别的资源——需要的是一个会npm install的人,和好奇心。
代码里的" duck ",写满了工程师的狼狈
泄露的代码被全球开发者扒了个底朝天。GitHub上迅速出现大量fork,Anthropic后来发了8000多份DMCA下架通知,但代码已经被复制了41500多次。镜像站点遍布各地,内部逻辑永久进入了公共领域。
开发者们像考古学家一样清理现场,发现的细节比泄露本身更耐人寻味:
// Found inside the leaked codebase:// A workaround using hex to encode the word "duck"// because the raw string collided with Anthropic's own internal CI pipeline checks.const targetAnimal = String.fromCharCode(0x64, 0x75, 0x63, 0x6b);
这段注释没有删。工程师用十六进制编码"duck"这个词,因为原始字符串会撞上他们自己的CI检查。换句话说,安全流程成了需要绕过的东西,而绕过方式被写进了注释,连同自嘲一起提交了。
更扎眼的是这个类型定义,在代码库里被高频使用:
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS = {sessionId: string;eventTrigger: string;// ...};
类型名本身就是一句求生欲极强的免责声明。能看出工程师被自己的安全审查压得喘不过气,不得不在变量名里发誓"我确认这不是代码或文件路径"。流程异化到这种程度,人就会和流程对抗,而对抗的痕迹成了泄露后的公开笑料。
编译开关背后的"影子功能"
比狼狈代码更敏感的,是藏在编译时标志(compile-time flags)后面的未发布功能。这些功能被刻意隐藏,没有对外披露,现在被强制公开。
具体有哪些,原文没有完整列举,但泄露的性质很明确:Anthropic的路线图、技术债务、内部争议,全部摊在了对手面前。竞争对手可以精确推算他们的工程节奏,安全研究者可以逐行审计他们声称的"AI安全"实现,投机者可以抢先复制尚未发布的产品形态。
Anthropic发言人的官方定性是"打包错误"(packaging error)。这个措辞轻巧得像把车祸说成"位移意外"。
事实是系统性失效:Bun的已知bug没人跟踪,发布流程没有自动检查source map,代码审查没发现59.8MB的异常体积,R2存储桶的权限配置依赖 obscurity(隐蔽式安全)而非 principle。
任何一个环节正常工作,都不会发生这件事。
"AI安全"公司的安全悖论
讽刺的不是事故本身,是事故的主体。Anthropic的核心卖点是"AI安全"——他们花大量篇幅论述如何对齐模型、如何防止滥用、如何负责任地部署。他们的招聘页面、融资路演、政策游说,全部围绕这个叙事构建。
现在这幅图景出现裂痕:一个连基础工程安全都做不好的组织,正在向全世界保证他们能驾驭更复杂的AI风险。这不是"他们也会犯错"的宽容时刻,是"他们声称的专业能力与实际表现"之间的落差。
类比一下:一家宣传"极致食品安全"的餐厅,被拍到厨师上完厕所不洗手。顾客有理由怀疑,他们宣传的HACCP体系、冷链监控、溯源系统,到底有多少是真实的,有多少是PPT。
科技行业的特殊性在于,工程文化很难伪装。代码泄露是CT扫描,能照出组织真实的肌肉纹理。Anthropic的扫描结果显示:高压下的工程师在绕过自己的流程,已知的技术债务没人清理,发布环节缺乏自动化防护。
这些和AI安全没有直接关系,但和"一家声称能解决AI安全的公司是否可信"高度相关。
41500次fork之后
事故已经发生, Anthropic 的应对是标准的危机公关:DMCA轰炸、声明淡化、内部调查。但41500次fork是个冰冷的数字,意味着法律手段只能清理表面,无法收回已经扩散的内容。
更长期的影响在技术层面。竞争对手获得了Anthropic的架构设计、依赖选择、抽象层级——这些信息原本需要大量逆向工程才能获取,现在免费下载。未发布功能的曝光可能迫使Anthropic提前或推迟路线图,打乱产品节奏。
对行业而言,这是一次昂贵的公共教育。npm包的体积检查、source map的自动剔除、存储桶的权限审计——这些 checklist 上的项目,现在有了3400亿美元量级的案例背书。其他团队的安全评审会上,"Anthropic那件事"会成为标准引用。
对Anthropic自己,真正的修复不是加两行.npmignore,是回答一个组织问题:为什么多个防线同时失效?CI流程为什么成了需要绕过的障碍?工程师为什么觉得在类型名里写免责声明比推动流程改进更安全?
这些问题没有技术捷径。它们关于权力结构、激励机制、心理安全感——关于一家快速膨胀的公司,是否在文化上跟上了估值的增长。
Chaofan Shou发现泄露的那个凌晨,他在推特上写了一句简单的广播。没有夸张,没有得意,就是一个链接和一句话。6小时后Anthropic的工程师醒来,面对的不仅是公关噩梦,是一面镜子。
现在这面镜子摆在所有人面前:如果你今天检查自己团队的npm包,会找到什么?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.