上周,黑客攻击者通过钓鱼手段入侵了 NPM 包维护者的账号,并在多个下载量巨大的包中注入恶意代码。这些包合计每周下载量超过 26 亿次,影响范围极其广泛。
事件经过
被劫持账号的维护者 Josh Junon(社区昵称 qix)已在第一时间确认了事件。
他表示,自己收到了伪装成 npm 官方的钓鱼邮件,发件域名是 support@npmjs.help,该域名背后的网站几乎一比一模仿了官方 npmjs.com。
在邮件中,攻击者声称用户的账号 2FA(双因素认证)凭证已过期,要求立刻更新,否则账号将在 2025 年 9 月 10 日被锁定:
"作为我们持续加强账号安全的一部分,我们要求所有用户更新双因素认证(2FA)凭证。我们的记录显示,您已超过 12 个月未更新 2FA。" "为了保证您账号的安全性与完整性,请尽快完成更新。请注意,从 2025 年 9 月 10 日起,未更新的账号将被暂时锁定,以防止未经授权的访问。"

这些钓鱼邮件同时发往了其他包维护者和开发者。BleepingComputer 的调查显示,npmjs[.]help 页面上还带有一个假冒的登录表单,所有输入的凭证会被窃取并传输到如下地址:
Plain Text https://websocket-api2[.]publicvm.com/images/jpg-to-png.php?name=[name]&pass=[password]
事件曝光后,NPM 官方已经移除了部分攻击者上传的恶意版本,其中包括被广泛使用的 debug 包(每周下载量 3.576 亿次)。

攻击机制
安全公司 Aikido Security 的分析指出,攻击者在获得维护权限后,对包进行了更新,在 index.js 文件中注入了恶意代码。
这段代码本质上是一个基于浏览器的拦截器,可以劫持网络流量和应用 API。它主要针对通过 Web 访问受感染应用的用户,监控加密货币地址与交易,并将交易定向重写到攻击者控制的钱包地址。
恶意逻辑的运行方式包括:
- 注入浏览器环境,监控 Ethereum、Bitcoin、Solana、Tron、Litecoin、Bitcoin Cash 等加密货币钱包。
- 一旦发现交易请求,就在签名前篡改目标地址,资金最终流入攻击者账户。
- 通过劫持 fetch、XMLHttpRequest 和钱包 API(如 window.ethereum、Solana 等)来实现拦截与篡改。
研究员 Charlie Eriksen 表示:
"这些包被更新后,会在用户的浏览器端执行一段隐藏代码,静默拦截 Web3 交互,篡改钱包调用,将资金和授权重定向至攻击者的账户,而用户毫无察觉。" "危险之处在于,它的运作层面非常广:既能篡改网页显示的内容,也能干预 API 调用,甚至能欺骗应用认为自己正在签署合法交易。"
受影响的包
目前确认被劫持的热门包包括(括号内为周下载量):
- backslash(26 万)
- chalk-template(390 万)
- supports-hyperlinks(1920 万)
- has-ansi(1210 万)
- simple-swizzle(2626 万)
- color-string(2748 万)
- error-ex(4717 万)
- color-name(1.917 亿)
- is-arrayish(7380 万)
- slice-ansi(5980 万)
- color-convert(1.935 亿)
- wrap-ansi(1.9799 亿)
- ansi-regex(2.4364 亿)
- supports-color(2.871 亿)
- strip-ansi(2.6117 亿)
- chalk(2.9999 亿)
- debug(3.576 亿)
- ansi-styles(3.7141 亿)
影响范围
尽管此次攻击的影响极大,但并非所有用户都会中招。Privy 首席安全工程师 Andrew MacPherson 指出,受害需要满足以下条件:
- 在 9 月 8 日美东时间上午 9:00 至 11:30 之间进行全新安装。
- 在该时间段生成了新的 package-lock.json 文件。
- 项目依赖链中包含了受影响的包。
这意味着实际受害范围要比初看时小很多。
背景与趋势
这并非孤立事件。过去几个月,NPM 已多次成为攻击者的目标:
- 2025 年 7 月 :攻击者劫持了 eslint-config-prettier(周下载量超 3000 万)。
- 2025 年 3 月:另有 10 个常用 npm 包被入侵,并植入信息窃取器。
这一系列事件显示:浏览器和前端供应链已经成为新的攻击面。通过篡改流量、窃取凭证和拦截交易,黑客能够直接突破开发与生产环境。
小结
npm 事件提醒我们,前端供应链已成为黑客眼中的"超级入口", 开源的便利与风险是并存的。未来,安全工程与前端开发之间的界限会越来越模糊,前端开发绝对不再仅限于"切图仔",需要在工具链之外,多一份"安全工程师思维"。