TanStack NPM包遭供应链攻击:Mini Shai-Hulud蠕虫如何窃取开发者凭证

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.orgseed{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,你的项目依赖链中如果有受影响的版本,同样面临风险。

应对措施

立即检查:

  1. 检查项目 lock 文件中是否包含受影响的版本号
  2. 如果在5月11日后执行过 npm install,检查是否有可疑的网络连接
  3. 检查 ~/.npmrc、~/.ssh、AWS/GCP 凭证是否泄露

紧急处理:

  1. 轮换所有可能泄露的凭证:NPM Token、GitHub Token、AWS Access Key、GCP Service Account Key、SSH 密钥
  2. 锁定 TanStack 相关包到安全版本
  3. 删除 node_modules 和 lock 文件后重新安装
  4. 检查 GitHub Actions workflow 配置是否被篡改

长期防护:

  • 使用 npm auditSocket.dev 等工具持续监控依赖安全
  • 启用 NPM 的 --ignore-scripts 或使用 pnpm 的严格模式
  • 定期审查项目依赖链

简评

这可能是2026年以来最严重的npm供应链攻击。蠕虫式传播 + 凭证窃取 + 死人开关的组合拳,说明npm生态的安全形势依然严峻。对于站长和前端开发者来说,养成审查依赖、锁定版本、定期轮换凭证的习惯比以往任何时候都重要。

来源:
TanStack Router Issue #7383
Socket.dev 攻击分析
StepSecurity 技术分析

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容