欢迎光临
我们一直在努力

TanStack npm 攻击事件表明 pnpm 11 的重要性

2026 年 4 月 28 日,pnpm 11 发布,它拥有主流 JavaScript 包管理器中最强大的安全默认设置。

此次发布正值 npm 供应链遭受一系列攻击之后,其中包括最近的 TanStack 攻击和范围更广的 Mini Shai Hulud 攻击活动。
这两起事件都暴露了 GitHub Actions 工作流、CI/CD 流水线和自动化依赖安装方面的漏洞。

现代前端应用程序通常依赖于成百上千个传递的 npm 包,这使得依赖项安装成为供应链攻击最容易传播的地方之一。

TanStack攻击内部

该攻击利用了 GitHub Actions 工作流和 CI 信任边界的漏洞,发布了多个@tanstack/*软件包的恶意版本。

简而言之,攻击者能够污染 CI 缓存、泄露运行时令牌,并将恶意软件包直接发布到 npm。

TanStack官方事后总结(TLDR)。

2026年5月11日19:20至19:26 UTC期间,攻击者通过以下手段发布了42个@tanstack/* npm包的84个恶意版本:使用pull_request_target“Pwn Request”模式、利用fork↔base信任边界对GitHub Actions缓存进行投毒,以及从GitHub Actions运行进程中提取运行时内存中的OIDC令牌。此次攻击未窃取任何npm令牌,npm发布工作流本身也未被破坏。这些恶意版本在20分钟内被stepsecurity的外部研究员ashishkurmi公开发现。所有受影响的版本均已被弃用;npm安全团队已介入从注册表中拉取tar包。我们没有证据表明npm凭据被窃取,但我们强烈建议所有在2026年5月11日安装了受影响版本的用户轮换安装主机可访问的AWS、GCP、Kubernetes、Vault、GitHub、npm和SSH凭据。

pnpm 11 中的新安全默认设置

长期以来,软件包管理器主要以便捷性为优化目标:立即安装软件包、自动运行脚本,并默认信任外部来源。

pnpm 11 开始对一些既有假设进行调整,新的默认设置侧重于更安全的安装和更严格的依赖项验证。在早期的 pnpm 版本中,许多此类保护措施都是需要用户选择启用的。

以下是一些最大的变化:

  • minimumReleaseAge: 1440— 将新发布软件包的安装延迟 24 小时
  • blockExoticSubdeps: true— 阻止有风险的非注册表依赖项
  • strictDepBuilds: true— 收紧安装时构建行为
  • verifyDepsBeforeRun: install— 执行前验证依赖关系

默认延迟安装新软件包

pnpm 11 现在默认会将新发布的软件包的安装延迟 24 小时。

minimumReleaseAge: 1440

软件包发布后的最初几个小时通常是风险最高的。延迟发布可以提供更多时间在恶意版本传播之前将其拦截。

以 TanStack 为例,由于延迟了 24 小时,受影响的版本根本就无法到达用户手中。

这将改变软件包的安装方式:

install immediately

allow time for ecosystem verification.

限制高风险依赖来源

另一个重大变化是默认情况下对特殊子依赖项的处理更加严格。

传统上,JavaScript 包管理器允许从 Git 仓库、tarball 和自定义注册表中引入依赖项,限制非常少。

例子:

{
  "dependencies": {
    "some-lib": "github:user/repository"
  }
}

问题在于,这些来源不像 npm 注册表那样经过严格的审核和透明化,因此更难监控或审计。这使得它们更容易被滥用。

收紧安装脚本权限

依赖项不仅仅会向项目中添加代码。它们还可以通过脚本在安装过程中运行代码,例如postinstall……

pnpm 11 对此进行了大幅改进,将安装脚本的使用变成了用户明确选择启用的功能。

这样就堵住了恶意软件在安装过程中执行代码的最简单方法之一。如果某些软件包确实需要构建脚本,您可以显式地允许它们运行:

allowBuilds:
  - esbuild
  - sharp

要点总结

  • pnpm 11 出厂时默认启用了多个以安全为中心的功能。
  • minimumReleaseAge将新发布的软件包的安装延迟 24 小时。
  • 一些新的默认设置旨在使常见的 npm 攻击更加困难。
  • 包管理器在保障 JavaScript 应用安全方面正发挥着越来越重要的作用。

有关所有更改的完整列表,请参阅 pnpm 11 官方发行说明。

结论

pnpm 11 感觉像是对 npm 生态系统不断遭遇的各种攻击的回应。

在发生像 TanStack 安全漏洞这样的事件之后,这类变化很难被忽视。

赞(0)
未经允许不得转载:X记录空间 » TanStack npm 攻击事件表明 pnpm 11 的重要性