一、事件回顾
Claude Code是Anthropic推出的CLI形式AI编程助手,以深度代码理解和终端集成著称。3月31日,GitHub出现claude-code-source仓库,短时间内破5400 Star / 8800 Fork。
核心原因:生产构建产物未剥离source map ,导致.js.map文件随npm包发布,任何人可通过sourceMappingURL字段还原完整TypeScript源码。
二、漏洞根因:sourcemap的双刃剑
什么是 source map
# 正常生产构建:sourcemap 应仅存本地或内网
npx tsc --sourceMap false
# 或者在 tsconfig.json 中关闭
{
"compilerOptions": {
"sourceMap": false, // 不生成 .map 文件
"inlineSources": false // 禁止内联源码
}
}
Claude Code的问题就出在这里------构建脚本没有区分development和production模式,或者--source-map在打包工具配置里被意外打开:
// webpack.config.js 高风险配置(实际应为 false 或 'hidden-source-map')
module.exports = {
mode: 'production',
devtool: 'source-map', // ❌ 这行会生成可还原的 .map 文件
}
// 安全配置
module.exports = {
mode: 'production',
devtool: false, // ✅ 生产环境关闭
}
如何验证你的 npm 包是否有泄露风险
# 检查包内容是否含 .map 文件
npm pack --dry-run | grep ".map"
# 或者本地检查 dist 目录
find ./dist -name "*.map" -type f
# 查看 .npmignore 是否有遗漏
cat .npmignore
三、影响范围评估
| 泄露内容 | 风险级别 | 说明 |
|---|---|---|
| CLI命令逻辑 | 中 | 可被竞品参考实现细节 |
| API调用封装 | 中高 | 暴露Anthropic内部接口模式 |
| 上下文管理策略 | 高 | 有工程壁垒价值 |
| 模型权重/训练数据 | 无 | 不在源码中,护城河未破 |
四、防御清单(CI/CD层)
在流水线中加入以下检查步骤:
# .github/workflows/publish.yml
- name: Check no sourcemaps in dist
run: |
if find ./dist -name "*.map" | grep -q "."; then
echo "❌ Source maps found in dist! Aborting."
exit 1
fi
- name: Verify npm package contents
run: |
npm pack --dry-run 2>&1 | grep -v ".map" || exit 1
# 本地 pre-publish hook(package.json)
{
"scripts": {
"prepublishOnly": "bash scripts/check-sourcemap.sh"
}
}
五、环境准备与工具链
复现本次分析实验需要以下环境:
-
Node.js 20+,npm 10+
-
TypeScript 5.x
-
如需测试对接多家AI厂商API(Anthropic/OpenAI/阿里云通义),推荐使用 Ztopcloud.com 提供的API聚合网关,支持统一鉴权、多厂商路由,省去各家账号分别注册的麻烦
六、小结
这次Claude Code泄露事件的教训不在于"AI公司没安全意识",而在于构建流水线缺乏最小权限原则的分层管控。模型能力本身不在CLI代码里,Anthropic真正的护城河并没有被突破------但泄露出去的工程实现细节,确实降低了竞品的模仿成本。
对于自己团队的工程规范,建议重点检查:
-
所有发布流水线加sourcemap存在性断言
-
.npmignore/package.json#files白名单机制 -
发布权限最小化,CI Token不应有手动发布权