写点什么

TanStack 披露一起复杂的 npm 供应链攻击事件, 42 个包遭入侵

作者:Craig Risi
  • 2026-05-22
    北京
  • 本文字数:1869 字

    阅读完需:约 6 分钟

TanStack 发布了一份详细的事件回顾报告,描述了一次复杂的供应链攻击。此次攻击仅用六分钟就攻破了 42 个 npm 包,并发布了 84 个恶意包版本,使开发人员和 CI/CD 系统面临凭证被盗和恶意软件传播的风险。该攻击利用了 GitHub Actions 缓存投毒、不安全的 pull_request_target 工作流以及运行时令牌提取等技术,不需要直接获取 npm 凭证,就可以将恶意代码注入到发布管道中。

据 TanStack 称,该事件发生于 5 月 11 日 UTC 时间 19:20 至 19:26 之间,攻击者利用被篡改的 GitHub Actions 缓存和工作流权限,生成能够直接发布到 npm 的 OpenID Connect (OIDC) 令牌。该恶意软件针对开发人员和持续集成(CI)环境,从 AWS、GCP、Kubernetes、Vault、GitHub、SSH 密钥以及 npm 配置中窃取凭证,随后通过加密消息基础设施将其外泄。这些恶意包还包含自传播机制,旨在入侵受影响开发人员维护的其他 npm 包。

此次攻击始于前一天,当时一名攻击者创建了 TanStack Router 代码库的一个重命名分支,并提交了一个看似无害的拉取请求。该拉取请求中隐藏着恶意有效负载,可以利用配置了 pull_request_target 模式的 GitHub Actions 工作流,使它能够跨越分支与主分支之间的信任边界,以提升后的权限执行。

通过篡改共享的 GitHub Actions 缓存,攻击者确保了恶意文件日后会在主分支的正常发布流程中被恢复。一旦维护者将无关的拉取请求合并到生产环境,受感染的缓存就会被加载到发布管道中,从而使恶意软件能够在测试阶段执行,并利用受信任的发布令牌直接将恶意包版本发布到 npm。关键在于,TanStack 已经确认, npm 令牌本身从未被盗;取而代之,攻击者滥用了已授予 CI/CD 工作流的权限。

攻击者注入的恶意软件非常危险,因为它会在使用 npm 生命周期脚本进行包安装时自动执行。一旦安装完成,它便会从开发人员的机器和持续集成(CI)环境中窃取云凭证、Kubernetes 令牌、GitHub 认证数据、SSH 密钥以及 npm 配置文件。随后,该恶意软件会枚举受害者维护的其他 npm 包,并将其重新发布(附带相同的恶意有效负载),从而设法自我传播。

恶意包出现在 npm 上不到 20 分钟,安全研究人员和外部贡献者就发现了这次安全事件,这使得 TanStack 能够迅速将受影响的版本标记为已弃用,并协同 npm 安全团队从注册表中移除了受感染的 tarball 文件。TanStack 随后承认,要不是该恶意软件在发布过程中意外导致了测试失败,那么本次攻击本可能长期不被发现。

这一事件凸显了针对开源包生态系统和持续集成/持续交付(CI/CD)基础设施的攻击正呈现出广泛的升级趋势。安全研究人员越来越频繁地警告称,构建管道本身正逐渐成为现代软件开发中的主要攻击面。近期涉及 npm 包遭入侵、PyPI 库被植入恶意代码以及针对广泛使用的JavaScript 依赖项的攻击等事件,充分展示了攻击者如何利用受信任的开源生态系统来获取企业基础设施的访问权限。

社区围绕 TanStack 安全事件的讨论主要集中在 GitHub Actions 的安全性,以及与 pull_request_target 工作流和共享缓存基础设施相关的风险上。在 Reddit 上,有开发人员和安全研究人员指出,许多组织仍然没有意识到 GitHub Actions 的缓存会在不同工作流之间共享,并且可能成为软件供应链本身的一部分。还有人指出,OIDC 可信发布机制是一把双刃剑:虽然它消除了长期有效的令牌,但一旦工作流遭到入侵,攻击者仍然可以为与该存储库库关联的每个包生成具有发布权限的凭证。

对此,TanStack 已经采取了多项重大的安全强化措施,包括移除不安全的工作流模式、清除缓存、将 GitHub Actions 固定到不可变的 SHA 值、添加存储库所有者验证,以及对发布管道实施更严格的管控。该组织还承认需要改进内部监控机制,并且指出,此次安全事件是经由外部研究人员而非内部警报系统发现的。

整个行业正通过 SLSA 溯源验证Sigstore 签名、依赖项审计以及更严格的 CI/CD 隔离等举措不断加强软件供应链的保护。然而,TanStack 事件表明,当现代自动化系统、软件包注册表和信任关系以意想不到的方式相互交织时,即便是成熟的开源项目也依然存在安全隐患。

归根结底,TanStack 事件凸显了软件行业日益强烈的共识:仅靠保护源代码存储库或凭证,已经无法确保现代软件供应链的安全。相反,攻击者正将目标锁定在维系现代开发流程的“隐形纽带”上,包括 CI/CD 管道、缓存、工作流权限、依赖项解析系统以及可信的自动化基础设施。

对于开发人员和企业而言,这一事件再次警示我们:开源安全不仅取决于代码本身,更取决于软件在整个交付流程中的构建、发布和信任机制。

原文链接:https://www.infoq.com/news/2026/05/tanstack-supply-chain-attack/