MindWave AI快报 聚合 AI 前沿动态,筛出值得关注的信号。

TanStack 42个npm包被劫持:攻击者利用CI/CD链路投毒,首获带SLSA签名的恶意版本

前端知名框架TanStack的42个官方npm包在5月11日遭供应链攻击,84个恶意版本通过GitHub Actions缓存投毒和OIDC令牌提取绕过正常发布流程,携带有效SLSA构建来源证明,为史上首例。

References

事件概述

2026年5月11日(UTC),前端生态中极具影响力的TanStack框架遭遇了一场前所未有的npm供应链攻击。攻击者在约6分钟内通过官方发布链路向npm推送了42个 @tanstack/* 包的84个恶意版本,GitHub安全漏洞库将此漏洞标记为CVE-2026-45321,CVSS评分高达9.6(严重级别)。

攻击手法:绕过合法签名的多阶段渗透

安全公司StepSecurity分析后指出,此次攻击的核心创新在于利用了GitHub Actions的"Pwn Request"模式。具体手法分为三个阶段:

  1. pull_request_target配置风险:攻击者向目标仓库提交Pull Request,利用pull_request_target在base仓库上下文中执行代码的特性,获取对CI/CD流水线的高权限访问。

  2. GitHub Actions缓存投毒:利用fork与base仓库之间的信任边界,通过恶意代码污染构建缓存,使后续正常构建流程加载被篡改的产物。

  3. OIDC令牌内存提取:从GitHub Actions运行器进程内存中提取OIDC令牌,从而绕过传统的静态token泄露方式,直接以合法发布者身份向npm推送恶意包。

更值得警惕的是,这些恶意包携带了有效的SLSA Build Level 3来源证明。这意味着攻击并非绕过了签名机制,而是让恶意代码"搭车"了经过签名的构建流水线——首次实现了带有效签名的供应链投毒。

恶意载荷特征

受感染版本可通过以下特征识别:

  • package.json 中新增 @tanstack/setup 可选依赖,指向 github:tanstack/router#79ac49ee...
  • 包根目录注入约2.3MB的混淆文件 router_init.js

恶意代码执行时会窃取受害者机器上的各类凭证,包括:

  • AWS、GCP云服务凭据
  • Kubernetes配置
  • Vault密钥
  • GitHub访问令牌
  • .npmrc认证信息
  • SSH私钥

数据通过Session/Oxen网络外传。此外,攻击者还为恶意软件集成了自传播能力——它会枚举受害维护者名下的其他npm包,尝试继续扩大投毒范围。部分样本还包含持久化机制及凭据撤销后的破坏性清理逻辑。

行业影响与安全警示

TanStack作为React Router、React Start等明星项目的背后组织,其包被广泛用于现代前端开发。Snyk安全研究员指出,鉴于该攻击产生的签名有效性,传统的"签名即可信"安全假设已被打破。开发者不应仅依赖SLSA provenance badge或npm trusted publisher状态,还需将CI/CD流水线本身视为攻击面进行审计。

应急响应建议

TanStack官方已于事件后弃用受影响版本,并联系npm安全团队移除恶意tarball。建议所有开发者和企业立即:

  1. 检查是否在 2026年5月11日19:20至19:30(UTC) 期间安装了 @tanstack/* 相关包
  2. 如有安装,按已失陷处理,立即轮换所有云服务、GitHub、npm、SSH凭据
  3. 从可信lockfile重新安装最新安全版本
  4. 审查CI/CD流水线配置,移除不必要的pull_request_target使用,对OIDC令牌访问实施最小权限原则

关于攻击组织

安全社区将此攻击归因于TeamPCP组织,该组织此前已通过类似的供应链攻击手法劫持过@ squawk/、@mistralai/ 等多个包生态。Mini Shai-Hulud蠕虫展现出持续演进的技术能力,表明npm供应链安全威胁已进入新阶段。