2026年5月11日,NPM生态爆出一起严重的供应链安全事件。热门前端库 TanStack Router 的多个NPM包被攻击者入侵,植入了一种名为”Mini Shai-Hulud”的自传播蠕虫程序。这不是简单的包劫持——它能自动感染受害者维护的其他包,形成链式传播。
事件概述
TanStack Router 是 React 生态中最受欢迎的路由库之一,周下载量达数百万。攻击者通过入侵 GitHub Actions 的 OIDC trusted-publisher 配置,在5月11日 UTC 时间约19:20和19:26分两批发布了包含恶意代码的版本。由于是通过合法的发布流程推送的,单纯的 npm token 轮换无法阻止再次被入侵。
攻击机制详解
这次攻击的手法非常精巧,分几步完成:
第一步:注入依赖。攻击者修改了受影响包的 package.json,添加了一个 optionalDependencies 指向一个伪造的包 @tanstack/setup,该包解析到 TanStack Router fork 中的一个隐藏 orphan git commit(79ac49ee)。
第二步:静默安装。当开发者执行 npm install 时,npm 会自动下载这个 optional dependency。安装过程中会执行 bun run tanstack_runner.js && exit 1。注意后面的 && exit 1——它让整个 optional dependency “安装失败”,从而隐藏攻击痕迹。
第三步:窃取凭证。实际执行的是一个约2.3MB的混淆文件 router_init.js,它会扫描并窃取以下凭证:
- AWS IMDS 和 Secrets Manager 凭证
- GCP 元数据服务令牌
- Kubernetes Service Account Token
- HashiCorp Vault Token
- ~/.npmrc 中的 NPM Token
- GitHub Token
- SSH 私钥
第四步:隐蔽传输。窃取的数据通过 Session/Oxen 端到端加密消息网络的 dead-drop 服务器传输(filev2.getsession.org、seed{1,2,3}.getsession.org)。由于使用的是去中心化加密通信协议,安全团队无法通过封锁 C2 服务器来阻止数据外泄。
第五步:自传播蠕虫。这是最危险的部分——恶意代码会枚举受害者在 npm 上维护的所有包,然后自动重新发布注入了相同恶意代码的版本,形成链式传播。
第六步:死人开关。攻击者还安装了一个 gh-token-monitor.sh 脚本作为 systemd 服务(Linux)或 LaunchAgent(macOS)。如果被窃取的 GitHub Token 被撤销(返回 HTTP 40x),脚本会自动执行 rm -rf ~/ 删除用户整个 home 目录。
受影响的包
以下14个 TanStack 官方包的两个恶意版本已在 NPM 上发布:
- @tanstack/react-router(最热门,React路由核心)
- @tanstack/router-core、router-utils、router-plugin
- @tanstack/react-start(TanStack Start 全栈框架)
- @tanstack/solid-router(Solid.js路由)
- @tanstack/router-generator、router-cli
- @tanstack/router-devtools、router-devtools-core
- @tanstack/history、virtual-file-routes
- @tanstack/router-vite-plugin
受影响的恶意版本号详见 GitHub Issue #7383。
未受影响的包:@tanstack/query*、@tanstack/table*、@tanstack/form*、@tanstack/virtual*、@tanstack/store 未受影响。
影响范围
由于蠕虫的自传播特性,截至目前已波及200+个其他NPM包。这意味着即使你没有直接使用 TanStack Router,你的项目依赖链中如果有受影响的版本,同样面临风险。
应对措施
立即检查:
- 检查项目 lock 文件中是否包含受影响的版本号
- 如果在5月11日后执行过
npm install,检查是否有可疑的网络连接 - 检查 ~/.npmrc、~/.ssh、AWS/GCP 凭证是否泄露
紧急处理:
- 轮换所有可能泄露的凭证:NPM Token、GitHub Token、AWS Access Key、GCP Service Account Key、SSH 密钥
- 锁定 TanStack 相关包到安全版本
- 删除
node_modules和 lock 文件后重新安装 - 检查 GitHub Actions workflow 配置是否被篡改
长期防护:
- 使用
npm audit和 Socket.dev 等工具持续监控依赖安全 - 启用 NPM 的
--ignore-scripts或使用 pnpm 的严格模式 - 定期审查项目依赖链
简评
这可能是2026年以来最严重的npm供应链攻击。蠕虫式传播 + 凭证窃取 + 死人开关的组合拳,说明npm生态的安全形势依然严峻。对于站长和前端开发者来说,养成审查依赖、锁定版本、定期轮换凭证的习惯比以往任何时候都重要。
来源:
TanStack Router Issue #7383
Socket.dev 攻击分析
StepSecurity 技术分析
















暂无评论内容