前端基础设施巨头 TanStack(旗下拥有 React Query, React Router, Table 等明星项目)近日遭遇了一起严重的供应链攻击。安全公司 Socket 检测到其 npm 命名空间下的 84 个包工件 被篡改,植入了旨在窃取 CI/CD 系统(如 GitHub Actions)敏感凭证的恶意软件。(来源)

此次攻击是持续进行的 “Mini Shai-Hulud” 恶意活动的一部分。由于受影响的包(如 @tanstack/react-router)每周下载量超过 1200 万次,且在生态系统中被广泛依赖,此次事件对全球前端开发社区构成了巨大威胁。
🚨 攻击详情:隐蔽且致命的恶意负载
1. 🕷️ 恶意文件:router_init.js
- 高度混淆:攻击者在包中添加了约 2.3 MB 的
router_init.js文件,使用javascript-obfuscator进行深度混淆(字符串数组旋转、控制流扁平化、死代码注入),以逃避静态分析。 - 守护进程化:该脚本通过
spawn创建守护进程,具备重入防护 (_DAEMONIZED) 和分离的 stdio,确保持久运行。 - 凭证窃取:专门针对 CI 环境,读取
GITHUB_*环境变量(包括 OIDC Token、PAT、Actor 身份),并将数据远程流式传输至攻击者控制的服务器(如filev2.getsession[.]org)。
2. 🎣 诱导机制:Git 依赖陷阱
- 可疑依赖:恶意版本在
package.json中添加了optionalDependencies:"@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c" - 生命周期钩子执行:该 Git 提交是一个无父历史的“孤儿提交”,包含一个
prepare钩子,执行bun run tanstack_runner.js && exit 1。当 npm/yarn/pnpm 安装基于 Git 的依赖时,会自动触发此钩子,从而在开发者机器或 CI 环境中执行任意代码。
3. 🕵️♂️ 攻击源头:被接管的 GitHub 账户
- 攻击者身份:提交由账户
voicproducoes发起,其仓库名为“A Mini Shai-Hulud has Appeared”,直接关联到近期的规模化 npm 攻击活动。 - 入侵路径:TanStack 事后分析表明,攻击者利用了 GitHub Actions 的
pull_request_target漏洞(Pwn Request),结合 Actions 缓存投毒 和 运行时内存提取 OIDC 令牌,最终通过项目的 OIDC 可信发布者绑定,直接向 npm 注册表发布了恶意包。值得注意的是,TanStack 的 npm Token 并未泄露,攻击者是利用了 CI 环境的信任机制。
🛡️ 紧急响应指南:立即行动!
如果你或你的团队使用了任何 @tanstack/* 包,请立即执行以下操作:
1. 🔍 立即分类与检测
- 检查哈希:在依赖树中搜索
router_init.js,并计算其 SHA-256 哈希值。若匹配ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c,则确认感染。 - 审计提交记录:运行
git log --all [email protected],查找非合法的 Claude Code GitHub App 发起的可疑提交,如有发现立即还原。
2. 🔑 凭证轮换(最高优先级)
在任何安装了受影响版本的系统上,立即轮换以下秘密:
- npm Tokens
- GitHub PATs / OIDC 信任配置
- AWS 凭证(静态密钥、实例角色)
- Vault Tokens / Kubernetes Service Account Tokens
3. 🏗️ GitHub Actions 加固
- 撤销 OIDC 联邦授权:针对从受影响仓库发布的 npm 包,暂时撤销其 OIDC 信任,待工作流彻底清理后再重新建立。
- 限制权限:在所有非发布工作流中设置
permissions: id-token: none,仅在特定的发布作业中启用id-token: write。 - 清理缓存:清除所有 GitHub Actions 缓存条目,防止缓存投毒持续生效。
4. 🧹 本地环境清理
- 审计配置目录:检查开发者主目录和项目根目录下的
.claude/和.vscode/,删除陌生的router_runtime.js、setup.mjs或settings.json/tasks.json中的异常钩子。 - 网络阻断:在防火墙或 DNS 层面阻止出站连接至
filev2.getsession[.]org及相关 Session 基础设施 IP。
5. 🔒 长期防御策略
- 锁定完整性:在
package-lock.json或pnpm-lock.yaml中固定@tanstack/*包的integrity哈希,CI 中强制校验,不匹配即失败。 - 不再盲目信任 Sigstore:此次攻击证明,能在 CI 中执行的攻击者可生成有效的 Sigstore 证明。需结合来源验证、行为监控等多层防御。
💡 行业启示
TanStack 事件再次敲响了软件供应链安全的警钟:
- CI/CD 是新的攻击面:攻击者不再仅盯着 npm Token,而是转向利用 CI 环境的 OIDC 信任和内存状态。
- 开源维护者需警惕“Pwn Request”:
pull_request_target等高风险触发器必须严格限制权限和合并条件。 - 依赖锁文件至关重要:固定哈希值是抵御此类篡改的最后防线。










