6分钟完成84个包的攻击:开源生态最危险的一天
2026年5月11日,一个攻击者在6分钟内向NPM仓库发布了84个恶意版本,覆盖42个TanStack包。整个过程没有盗走任何npm token,却让数百个开发者和CI环境中招。
这不是普通的供应链攻击。攻击者用了三招组合:
(1) pull_request_target的"Pwn Request"模式,利用fork和base之间的信任边界
(2) GitHub Actions缓存投毒,跨越fork到原仓库的信任链
(3) 从GitHub Actions运行环境中直接提取OIDC token,内存级别的攻击
恶意代码做了什么?当开发者运行npm install、pnpm install或yarn install时,它会:
自动提取AWS IMDS/Secrets Manager、GCP元数据、Kubernetes服务账号token、Vault token、~/.npmrc、GitHub token(环境变量、gh CLI、.git-credentials)、SSH私钥。
然后通过Session/Oxen通讯网络上传数据,全程端到端加密,没有攻击者控制的C2服务器,传统的IP/域名封禁对它无效。
更可怕的是,它还会自我传播:遍历受害者维护的其他npm包,在搜索到maintainer信息后,用相同的方式重新发布这些包,把恶意代码继续扩散出去。
外部安全研究员ashishkurmi在20分钟内就发现了这波攻击,并通知了TanStack团队。目前所有恶意版本已被标记为deprecated,npm安全团队正在从仓库中清除tarball。
如果你在5月11日安装了任何受影响的版本,你的开发机就已经不安全了。安全专家建议:立刻轮换AWS、GCP、Kubernetes、Vault、GitHub、npm和SSH的凭证——任何能从安装主机访问的凭证都要换。
这起事件暴露了一个残酷事实:供应链攻击的门槛已经低到普通黑客也能玩了。攻击者不再需要偷token,他们直接在你眼皮底下"借"走runner进程的内存。这波操作给所有依赖开源生态的团队敲响了警钟。