一个npm包的配置失误,让Anthropic的工程师们周二早上集体清醒了。安全研究员Chaofan Shou在例行检查中发现,Claude Code的官方npm包里躺着一张map文件——这张本该用于调试的地图,直接指向了Anthropic Cloudflare R2存储桶上的一个zip压缩包。
解压后,1,900个TypeScript文件、512,000行源代码、完整的slash命令库和内置工具集,全部裸奔。从发现到GitHub备份仓库被fork超过41,500次,只隔了几个小时。这场"开源"运动的速度,比Anthropic的公关响应还快。
这不是什么惊天秘密的泄露,而是一次教科书级的低级错误。
Claude Code的代码早就被逆向工程社区研究透了。CCLeaks这类项目甚至专门建了网站,持续曝光官方未公开的隐藏功能。但这次泄露的特殊之处在于:它提供了新鲜、完整的官方迭代版本,相当于给逆向工程师们发了一份标准答案。
软件工程师Gabriel Anhaia在深度分析中写道:「A single misconfigured .npmignore or files field in package.json can expose everything。」——一个配置字段的疏忽,就能让一切归零。他的这句话正在被开发者社区疯狂转发,毕竟谁都不想成为下一个Anthropic。
map文件:生产环境的隐形炸弹
map文件(Source Map)的设计初衷很朴素:把压缩后的代码映射回原始源码,方便调试。但把它打进生产包,就像给自家房子画张详细地图,然后贴在小区公告栏。
行业惯例是明确的——生产环境绝不携带map文件。它们不仅增加包体积,更致命的是保留了指向原始代码的完整路径。Anthropic这次的问题在于,map文件里的路径不是相对路径,而是一个可直接下载的云端zip链接。Chaofan Shou等人要做的,只是点击下载。
Anthropic的回应很干脆:「Earlier today, a Claude Code release included some internal source code... no customer data or credentials were involved。」——承认人为错误,划清数据安全边界。这种表态在危机公关里算及格,但掩盖不了一个尴尬事实:一家估值数百亿美元的AI公司,在基础工程规范上栽了跟头。
512,000行代码里藏着什么
泄露的代码量足够填满一本《战争与和平》还有余。但真正让技术社区兴奋的不是代码本身,而是对比验证的机会。
CCLeaks维护者可以拿着官方源码,逐行核对之前的逆向推测。哪些功能是实验性的、哪些API被隐藏了、权限校验逻辑如何设计——这些原本需要猜测的信息,现在有了权威参照。Anhaia的分析指出,部分内置工具的调用机制与社区猜测存在偏差,这种偏差本身就是有价值的情报。
更微妙的是时间戳。这次泄露的代码版本较新,包含了尚未公开的功能迭代。对于依赖Claude Code做二次开发的团队来说,提前看到官方实现思路,相当于拿到了产品路线图的技术预览版。
代码泄露对AI公司未必全是坏事,前提是泄露方式得体面。 主动开源能收获社区贡献,被动裸奔只会暴露工程能力的短板。Anthropic这次属于后者。
构建管道的幽灵故障
现代软件开发的构建流程像一条自动化流水线:代码提交、依赖安装、打包压缩、发布上线。Anthropic的事故发生在最后一环——npm publish的配置阶段。
问题可能出在.npmignore文件的遗漏,或者package.json里files字段的疏忽。这两个配置项决定了哪些文件会被打入最终的npm包。漏掉一个排除规则,map文件就会混在产物里被上传。更糟的是,如果CI/CD流程没有二次校验,这种错误会被自动化部署无限放大。
Anhaia的提醒之所以引发共鸣,是因为几乎每个开发者都经历过类似的惊魂时刻。区别在于,大多数人的失误影响范围限于内部项目,而Anthropic的失误被4万多个GitHub fork永久存档。这种放大效应,是头部科技公司必须支付的注意力税。
Anthropic的工程师们现在最该问自己的是:我们的构建管道里,还躺着多少张没清理的地图?而读到这里的你,要不要现在就去检查一下项目的.npmignore?
热门跟贴