事件概述
2026年5月11日(UTC),前端生态中极具影响力的TanStack框架遭遇了一场前所未有的npm供应链攻击。攻击者在约6分钟内通过官方发布链路向npm推送了42个 @tanstack/* 包的84个恶意版本,GitHub安全漏洞库将此漏洞标记为CVE-2026-45321,CVSS评分高达9.6(严重级别)。
攻击手法:绕过合法签名的多阶段渗透
安全公司StepSecurity分析后指出,此次攻击的核心创新在于利用了GitHub Actions的"Pwn Request"模式。具体手法分为三个阶段:
pull_request_target配置风险:攻击者向目标仓库提交Pull Request,利用pull_request_target在base仓库上下文中执行代码的特性,获取对CI/CD流水线的高权限访问。
GitHub Actions缓存投毒:利用fork与base仓库之间的信任边界,通过恶意代码污染构建缓存,使后续正常构建流程加载被篡改的产物。
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。建议所有开发者和企业立即:
- 检查是否在 2026年5月11日19:20至19:30(UTC) 期间安装了 @tanstack/* 相关包
- 如有安装,按已失陷处理,立即轮换所有云服务、GitHub、npm、SSH凭据
- 从可信lockfile重新安装最新安全版本
- 审查CI/CD流水线配置,移除不必要的pull_request_target使用,对OIDC令牌访问实施最小权限原则
关于攻击组织
安全社区将此攻击归因于TeamPCP组织,该组织此前已通过类似的供应链攻击手法劫持过@ squawk/、@mistralai/ 等多个包生态。Mini Shai-Hulud蠕虫展现出持续演进的技术能力,表明npm供应链安全威胁已进入新阶段。