2026年3月31日,npm生态经历了一次教科书级的供应链攻击。Axios——这个每周下载量超1亿次的HTTP客户端库——有两个版本被植入了完整的远程访问木马。攻击者疑似劫持了维护者账户,在axios@1.14.1和axios@0.30.4被下架前,它们已经在线足够久,久到没人说得清有多少开发环境已经中招。
安全公司Socket的自动化扫描器在6分钟内就揪出了元凶:一个名叫plain-crypto-js@4.2.1的恶意依赖。这包前一天还以"干净"面貌冒充crypto-js的拼写变体混进仓库,第二次发布时才露出獠牙,时间掐得和Axios的版本更新分秒不差。1.x和0.x两个分支在39分钟内接连沦陷,用^1.14.0或^0.30.0这类宽松版本号的项目,下次npm install时就会无声无息地把木马领进门。
两个 poisoned 版本都没出现在Axios的GitHub Release页面——这本身就是警报。一位协作者后来坦言,攻击者在npm上的权限一度比他们还高,团队一度连撤销访问都做不到。初步调查指向一个老问题:长期有效的npm token配合受信任发布机制,成了攻击者的VIP通道。
Socket创始人Feross Aboukhadijeh的警告很直白:"现在每次npm install都可能是俄罗斯轮盘。"前特斯拉AI总监Andrej Karpathy也后怕地分享,自己前几天刚好装过相关工具,"幸运的是"版本锁在了1.13.5——但依赖没固定意味着,如果动作晚几天,中招的就是他。
他提议包管理器应该改改默认设置,别让一个被攻破的包靠版本漂移随机感染用户。Hacker News上的讨论提到一个简易防护:在~/.npmrc里加上ignore-scripts=true。Bun和pnpm用户倒是省心——它们默认就不跑安装脚本。
目前所有使用Axios的项目都建议立即回滚。团队已在仓库中标记了受污染版本为废弃。改用原生fetch、got或ky的开发者这次躲过一劫,这些库没有浏览器polyfill的历史包袱,依赖树也更瘦。Axios事件后,"最小依赖"作为安全策略的讨论又热了起来。Wiz、Snyk、Aikido和StepSecurity均已发布详细的事件复盘和修复指南。
热门跟贴