

2026 年 3 月 31 日,StepSecurity 发现 npm 上发布了两个广泛使用的 `axios` HTTP 客户端库的恶意版本:`axios@1.14.1` 和 `axios@0.30.4`。攻击者利用被劫持的 axios 主要维护者的 npm 凭证,绕过该项目正常的 GitHub Actions CI/CD 管道,手动发布了受污染的软件包。
这两个恶意版本注入了新依赖 `plain-crypto-js@4.2.1`,其唯一目的是执行 `postinstall` 脚本,充当跨平台的远程访问木马(RAT)植入器,目标是 macOS、Windows 和 Linux 系统。
axios 是 JavaScript 生态系统中最流行的 HTTP 客户端库,每周下载量超过 3 亿次,此次攻击影响范围巨大。

攻击者首先攻破了 axios 项目主要维护者的 `jasonsaayman` npm 账户,将注册电子邮件更改为 `ifstap@proton.me`。利用该账户,攻击者在 1.x 和 0.x 发布分支上同时发布恶意版本,使受影响项目数量最大化。
在发布受后门攻击的 axios 版本之前,攻击者预先在 npm 上部署了恶意软件包 `plain-crypto-js@4.2.1`,由单独的一次性账户 `nrwise` 发布。该软件包伪装成 `crypto-js`,包含 `postinstall` 钩子和证据销毁机制。
攻击者将 `plain-crypto-js: "^4.2.1"` 作为运行时依赖添加到 `axios@1.14.1` 和 `axios@0.30.4` 中,当开发者运行 `npm install` 时,会自动触发 `postinstall` 脚本,启动植入器。

攻击提前约 18 小时进行准备,恶意依赖在 axios 发布之前就已在 npm 上部署。
2026 年 3 月 30 日 05:57,`plain-crypto-js@4.2.0` 发布,作为干净的诱饵包;23:59,`plain-crypto-js@4.2.1` 发布,添加恶意有效负载。
3 月 31 日 00:21,`axios@1.14.1` 发布;01:00,`axios@0.30.4` 发布。约 03:15,npm 撤销了这两个版本的发布;03:25,npm 对 `plain-crypto-js` 实施安全冻结;04:26,发布安全占位符 `plain-crypto-js@0.0.1-security.0`。

此次攻击暴露出多个安全问题。攻击者获取了维护者账户的长期经典 npm 访问令牌,绕过了合法版本使用的 OIDC 可信发布机制。
npm 平台在账户安全验证和软件包审查方面存在不足,未能及时发现异常发布。同时,开发者在使用第三方库时,缺乏有效的安全检测手段,难以察觉隐藏的恶意依赖。

此次事件为整个行业敲响了警钟,凸显了供应链安全的重要性。企业应加强对维护者账户的安全管理,采用多因素认证等措施,防止账户被劫持。
在使用第三方库时,要建立严格的安全审查机制,对依赖进行深入分析,及时发现和排除潜在的安全风险。同时,加强对安全工具的使用,如 StepSecurity Harden-Runner 等,提高对异常行为的检测能力。
编辑观点:此次 axios 库攻击事件揭示了软件供应链安全的脆弱性。企业和开发者需高度重视,加强安全管理和技术防护,共同筑牢行业安全底线,避免类似事件再次发生。
613

被折叠的 条评论
为什么被折叠?



