赶紧检查!npm被投毒,可能已经在偷你的密钥!
(来源:石臻说AI)

石臻说AI
编辑:石臻
导读: 你用 npm 装过 TanStack 的包吗?如果在5月11日晚上装过——AWS密钥、GitHub Token、SSH私钥可能已经被偷走了。更恐怖的是:如果你发现中招想撤销 GitHub Token,黑客装了一个死亡开关,撤销那一刻就会触发 `rm -rf ~/`,直接删光你的主目录。
到底发生了什么
2026年5月11日北京时间凌晨3点20分,一场精心策划的供应链攻击悄悄启动。
攻击者发布了84个恶意版本,覆盖42个 @tanstack/* npm 包。只要你在那段时间跑过 npm install,你的机器就可能成了攻击者的数据金库。

被攻击的包全都是前端开发者熟悉的名字:@tanstack/react-router、@tanstack/query、@tanstack/history……
这不是小众工具。TanStack 系列每周下载量超过千万,用在全球无数公司的生产系统里。
三环连锁攻击,每一环都是精准设计

TanStack 官方复盘把这次攻击分析得非常透彻——这不是运气撞上去的漏洞,而是三个已知漏洞的环环相扣。
第一环:伪造身份混入代码
攻击者注册了一个 GitHub 账号 zblgg,从 TanStack/router fork 了一个仓库,然后向官方仓库发了一个 PR,标题叫"WIP: simplify history build"——看起来像个普通的代码优化。
关键在于这个 PR 里藏了一个 vite_setup.mjs 文件,里面是约 3 万行混淆过的 JS 代码。提交者身份写的是 claude ——不是 Anthropic 的 Claude,是伪造的身份信息。
第二环:毒化 GitHub Actions 缓存
TanStack 有一个 bundle-size.yml 工作流,它使用了 pull_request_target 触发器。这个触发器有一个危险特性:它会在 base 仓库的权限下运行来自 fork 的代码,并且能写入 base 仓库的 Actions 缓存。
攻击者的 PR 触发了这个工作流,执行了恶意的 vite_setup.mjs,这段代码把一个毒化的 pnpm 存储写入了缓存,缓存 key 精确匹配了发布工作流 release.yml 会用到的那个 key。
就像在面粉厂的原料仓里偷偷掺了砒霜,等着下游的面包厂用。
第三环:从内存里偷 OIDC Token
当 TanStack 开发者正常合并 PR 触发 release.yml 时,被毒化的缓存被恢复到 CI 运行环境里。恶意代码在这里做了一件教科书级别的操作:
通过 /proc/*/cmdline 找到 GitHub Actions Runner 进程,读取 /proc//maps 和 /proc//mem,直接从内存里提取 OIDC token。
然后用这个 token 直接向 npm registry 发包——完全绕过了正常的发布流程。
这个内存提取脚本,官方复盘里写道:"是来自 2025年3月 tj-actions/changed-files 事件的逐字照抄版本,连代码注释都没改。"
攻击者用的是完全公开的攻击手法。
你的机器上在跑什么
一旦有人在受感染的环境里跑了 npm install,router_init.js 就会在安装过程中自动执行。这个 2.3MB 的混淆脚本做了以下事情:
凭证收割:
AWS IMDS / Secrets Manager 凭证GCP 元数据服务 TokenKubernetes service account TokenVault Token~/.npmrc 里的 npm 发布密钥GitHub Token(环境变量、gh CLI、.git-credentials)SSH 私钥数据外泄: 不走普通 HTTP,走的是 Session/Oxen 加密通讯网络(filev2.getsession.org、seed{1,2,3}.getsession.org),端对端加密,没有中央服务器可以封锁。
蠕虫传播: 枚举受害者在 npm 上维护的所有包,自动把恶意代码注入进去再发布。这就是为什么这次事件从 TanStack 蔓延到了 OpenSearch Python SDK(130万周下载)、mistralai Python 包、guardrails-ai,以及更多。


死亡开关(最危险的部分):
安全研究员 carlini 在 GitHub Issue 里发现了这个细节:脚本在 Linux 系统里会安装一个 systemd 用户服务,在 macOS 里会安装一个 LaunchAgent,每60秒检查一次被盗的 GitHub Token 是否还有效。
一旦你撤销 Token,它立刻执行 rm -rf ~/。

如何判断自己是否中招

第一步:检查是否安装了受感染版本
社区开发者 Rohit Tyagi 做了一个快速扫描工具:
npx supply-chain-attack
它会检查本机是否安装了已知受感染的包版本、npm 缓存里是否有痕迹、全局安装状态、以及可疑文件。
第二步:手动检查 package.json
在任何 @tanstack/* 包的 package.json 里,如果看到:
"optionalDependencies": { "@tanstack/setup": "github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c"}
这就是感染标志。可以用这个命令验证:
npm pack @tanstack/@tar -xzf *.tgzcat package/package.json | grep -A3 optionalDependenciesls -la package/router_init.js
(npm pack 不会执行安装脚本,是安全操作。)
第三步:检查是否安装了持久化后门
如果你是 Linux 用户,检查:
ls ~/.config/systemd/user/ | grep gh-token-monitorsystemctl --user status gh-token-monitor
macOS 用户检查:
ls ~/Library/LaunchAgents/ | grep com.user.gh-token-monitor
受影响的时间窗口: 2026年5月11日 19:20 到 19:30 UTC(北京时间 5月12日凌晨 3:20–3:30),在这段时间内运行过任何 TanStack 包的 npm install 才可能中招。
中招了怎么办
⚠️ 先处理持久化后门,再撤销 Token
顺序非常重要。如果先撤销 GitHub Token,会触发 rm -rf ~/。
1先找到并停止 gh-token-monitor 服务(见上方命令)
2删除相关服务文件
3然后再轮换所有凭证:
- GitHub Token - AWS / GCP / Kubernetes 凭证 - npm Token(~/.npmrc
) - SSH 私钥4审计过去几小时的云服务操作日志,看是否有异常调用
5用干净的 lockfile 重新安装依赖
如果你是 npm 包维护者:
检查你的包是否也被蠕虫感染——如果你的机器中了招,攻击者可能已经用你的凭证发布了新版本。
这次事件说明了什么
TanStack 官方复盘里有一句话挺扎心的:
"检测是靠外部的。我们是从第三方那里知道自己被攻击的。"一个每周数千万下载量的顶级开源项目,被黑了20分钟才靠外部研究员发现。
这次攻击用的每一种技术都是公开资料:pull_request_target 滥用问题2023年就被研究透了,cache poisoning 攻击 Adnan Khan 2024年写了完整分析,内存提取 OIDC token 的 Python 脚本是 2025年3月事件里的原版照抄。
攻击者没有发明任何新东西,只是把三个已知漏洞拼在了一起。
对开发者来说,现实就是这样:npm install 这个每天跑无数次的命令,背后其实有相当大的供应链攻击面。社区里流传的建议是用 pnpm 并开启 minimumReleaseAge: 7d——让新发布的包等7天再安装,给安全社区足够的时间发现问题。
当然,这次攻击从发布到被发现只用了20分钟,7天根本不够。
更根本的防护还是落在两点:定期审计依赖、监控自己的发布管道。
参考链接
TanStack 官方事后复盘:https://tanstack.com/blog/npm-supply-chain-compromise-postmortemGitHub 安全跟踪 Issue:https://github.com/TanStack/router/issues/7383Socket Security 攻击追踪:https://socket.dev/supply-chain-attacks/mini-shai-huludStepSecurity 技术分析:https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem相关推荐
赶紧检查!npm被投毒,可能已经在偷你的密钥!
速查你的支付宝,赶紧解除,有人被“偷”不少钱
清单之惑:npm供应链面临的新威胁
「Anchore」获 2000 万美元 A 轮融资,为客户提供量身定制的容器合规性检查方案
刚刚,GitHub宣布正式收购npm
被投毒的游族老板,是个什么样的人?
网购狗粮疑被投毒?涉事商家称是谣言
让科大讯飞一天蒸发120亿的“数据投毒”是啥?
快自查!!67款APP违法收集个人信息被通报!快看看你的手机有没有这些"偷窥狂"
GitHub宣布收购npm,微软或成最大赢家,开源界野蛮竞争影响1200万开发者
网址: 赶紧检查!npm被投毒,可能已经在偷你的密钥! http://www.xishuta.cn/newsview149580.html
推荐科技快讯
- 1问界商标转让释放信号:赛力斯 95792
- 2报告:抖音海外版下载量突破1 25736
- 3人类唯一的出路:变成人工智能 25175
- 4人类唯一的出路: 变成人工智 24611
- 5移动办公如何高效?谷歌研究了 24309
- 6华为 nova14深度评测: 13155
- 7滴滴出行被投诉价格操纵,网约 11888
- 82023年起,银行存取款迎来 10774
- 9五一来了,大数据杀熟又想来, 9794
- 10手机中存在一个监听开关,你关 9519
