2025 年初,一起涉及 Claude Code NPM 包的安全事件引发了开发者社区的广泛关注。Anthropic 在发布 @anthropic-ai/claude-code 包时,意外将完整的 Source Map 文件打包进发布产物,导致任何人都能通过这些映射文件还原出包的原始 TypeScript 源代码。更严重的是,连 Claude Code 的系统提示词也一并被泄漏。这一事件不仅暴露了商业产品的内部实现细节,更为攻击者提供了逆向分析与漏洞挖掘的温床,成为供应链安全领域的典型案例。
Source Map 在生产环境中的风险本质
Source Map 是现代 JavaScript 构建流程中的重要工具,它建立了压缩混淆后的代码与原始源代码之间的映射关系。典型配置下,生成的文件会包含 .map 扩展名,内容记录了原始文件名、行号、列号与压缩后位置的对应关系。在开发阶段,这种机制极大提升了调试效率,使开发者能够在浏览器中直接查看或调试未压缩的原始代码。然而,当这类文件被意外发布到生产 NPM 注册表时,风险便随之而来。
攻击者获取到目标的 Source Map 后,能够还原出完整的原始代码结构。这包括未经过混淆的函数名、变量名、业务逻辑注释,甚至是内部 API 的调用路径。对于像 Claude Code 这类涉及大语言模型交互的工具,源代码的暴露意味着攻击者可以分析其与后端模型的通信协议、理解提示词工程的具体实现,甚至发现潜在的安全漏洞。Hacker News 上的讨论指出,有人通过提取 Source Map 成功还原了 Claude Code 的完整源代码库,并将其上传至 GitHub 供公开研究。
更值得关注的是系统提示词的泄漏。在 Claude Code 的案例中,攻击者不仅获取了应用程序逻辑,还获取了指导模型行为的系统指令。这些指令通常包含安全约束、行为边界和功能限制,泄漏后可能被恶意利用来绕过安全控制或构建针对性攻击。这一维度的影响远超代码本身,触及到 AI 系统安全的核心层面。
工程化审计清单:检测与修复 Source Map 泄漏
针对 NPM 包的 Source Map 泄漏风险,企业应当建立覆盖发布前、发布后两个阶段的审计机制。发布前阶段需要在构建配置中明确排除 Source Map 文件的打包。以常用的打包工具为例,Vite 项目应在 vite.config.ts 中将 build.sourcemap 设置为 false 或在生产环境使用条件判断仅在开发模式启用;Webpack 用户可通过 productionSourceMap: false 彻底禁用生成。若必须保留调试能力,建议采用独立的调试构建或使用 Source Map 片段而非完整映射。
发布后阶段的审计同样关键。建议在 CI/CD 流程中集成自动化检查步骤,使用如 npm pack --dry-run 预览打包内容,确认不存在 .map 文件后再正式发布。对于已有存量包,可以使用 npm view <package-name> dist.tarball 下载并检查历史版本是否包含 Source Map。GitHub 上已有开发者提供了针对此类风险的检测脚本,可集成到依赖安全扫描工具中。
对于已泄漏的包,快速响应至关重要。首先应立即发布新版本并彻底移除 Source Map 生成逻辑,同时在安全公告中说明影响范围。若泄漏涉及敏感信息如系统提示词或内部配置,应评估是否需要更换相关密钥或指令,并在可能的情况下推送安全更新以修复因代码暴露而发现的漏洞。
供应链安全视角下的长期防护策略
Source Map 泄漏并非孤例,它是 NPM 生态系统供应链安全挑战的一个缩影。企业在依赖外部包时,应当遵循最小权限原则,仅安装必要的依赖,并定期审计直接与间接依赖的安全性。对于商业级工具的使用,建议锁定特定版本而非使用灵活的版本范围,避免因上游悄然更新而引入包含敏感信息的构建产物。
引入依赖审计工具链是提升供应链透明度的有效手段。工具如 Snyk、Dependabot 或 Renovate 能够持续监控依赖项的安全公告,并提供可配置的策略来自动拒绝存在已知漏洞或异常构建行为的版本。在企业层面,还可考虑搭建私有 NPM 镜像并实施内容审查,阻止包含 Source Map 或其他敏感文件的包进入内部环境。
此外,开发团队应当在内部推行安全编码实践培训,使成员理解构建产物中各类文件的潜在风险。区分开发依赖与生产依赖、配置正确的构建模式、避免在生产环境使用调试符号,这些看似基础的操作实则是防止信息泄漏的第一道防线。
结论
Claude Code 事件清晰地展示了 NPM 包中 Source Map 文件的意外泄漏如何演变为严重的供应链安全风险。从代码逆向到系统提示词暴露,攻击者的获益边界远超出普通功能代码的范畴。企业应当从构建配置优化、发布流程审计、依赖管理策略三个维度建立纵深防御体系,将 Source Map 风险纳入常规安全评估的范畴。唯有多层面的主动防护,才能在日益复杂的开源生态中守住关键信息的底线。
资料来源:Hacker News 讨论记录,披露了 Claude Code 源代码通过 Source Map 被完整提取的技术细节。