10+年产品经理聊聊产品、测测产品,产品人交流学习成长平台,按 Ctrl+D 收藏我们
关于我 留言板 小程序 标签云

苏米客

  • 首页
  • AIGC
    • AI最新动态
    • AI学习教程
    • AI工具集合
    • AI产品百科
    • AI编程开发
    • AI提示词
    • AI开源项目
    • AI智能体
  • Axure
    • Axure动态
    • Axure教程
  • 产品
    • 用户体验
    • 产品设计
    • 苏米杂谈
  • 资源
    • 产品UI组件库
    • 开源图标库
    • 中后台框架
  • 书单
    • AI书籍
    • 用户体验
    • UI视觉
    • 产品研究
    • 其他类型
  • 下载
    • Axure组件
    • Axure原型
    • 文档报告
    • 素材资源
  • 登录
  • 首页
  • AIGC
    • AI最新动态
    • AI学习教程
    • AI工具集合
    • AI产品百科
    • AI编程开发
    • AI提示词
    • AI开源项目
    • AI智能体
  • Axure
    • Axure动态
    • Axure教程
  • 产品
    • 用户体验
    • 产品设计
    • 苏米杂谈
  • 资源
    • 产品UI组件库
    • 开源图标库
    • 中后台框架
  • 书单
    • AI书籍
    • 用户体验
    • UI视觉
    • 产品研究
    • 其他类型
  • 下载
    • Axure组件
    • Axure原型
    • 文档报告
    • 素材资源
当前位置: 首页 » AI最新动态

npm供应链攻击事件:TanStack包被投毒,GitHub密钥面临泄露风险

3小时前 AI最新动态 25 0

如果你使用 npm 安装过 TanStack 系列的包,需要立即检查——在 2026年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 系列每周下载量超过千万,广泛应用于全球无数公司的生产系统中。

受影响的 npm 包

三环连环攻击

TanStack 官方的事后复盘显示,这不是单一漏洞的利用,而是三个已知漏洞的环环相扣。

第一环:伪造身份混入代码

攻击者注册 GitHub 账号 zblgg,从 TanStack/router fork 仓库后向官方仓库提交了一个 PR,标题为「WIP: simplify history build」,看起来像普通的代码优化。

关键问题在于,这个 PR 中隐藏了一个 vite_setup.mjs 文件,里面包含约 3 万行混淆过的 JavaScript 代码。提交者身份信息被伪造为 claude。

第二环:毒化 GitHub Actions 缓存

TanStack 的 bundle-size.yml 工作流使用了 pull_request_target 触发器。这个触发器有一个危险特性:它会在 base 仓库的权限下运行来自 fork 的代码,并且能写入 base 仓库的 Actions 缓存。

攻击者的 PR 触发了该工作流,执行了恶意代码,将毒化的 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 元数据服务 Token
  • Kubernetes service account Token
  • Vault Token
  • ~/.npmrc 中的 npm 发布密钥
  • GitHub Token(环境变量、gh CLI、.git-credentials)
  • SSH 私钥

数据外泄

数据通过 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 不会执行安装脚本,是安全操作):

npm pack @tanstack/@
tar -xzf *.tgz
cat package/package.json | grep -A3 optionalDependencies
ls -la package/router_init.js

第三步:检查持久化后门

Linux 用户:

ls ~/.config/systemd/user/ | grep gh-token-monitor
systemctl --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. 轮换所有凭证:
  4. GitHub Token
  5. AWS / GCP / Kubernetes 凭证
  6. npm Token(~/.npmrc)
  7. SSH 私钥
  8. 审计过去几小时的云服务操作日志,检查异常调用
  9. 用干净的 lockfile 重新安装依赖

npm 包维护者注意: 检查你的包是否也被蠕虫感染——如果机器中招,攻击者可能已经用你的凭证发布了新版本。

中招检查清单

事件启示

TanStack 官方复盘中的一句话令人深思:

「检测是靠外部的。我们是从第三方那里知道自己被攻击的。」

一个每周数千万下载量的顶级开源项目,被攻击 20 分钟后才靠外部研究员发现。

此次攻击使用的每种技术都是公开资料:pull_request_target 滥用问题在 2023 年已被研究透彻,cache poisoning 攻击在 2024 年有完整分析,内存提取 OIDC token 的脚本是 2025 年事件的原版照抄。攻击者没有发明任何新技术,只是将三个已知漏洞组合在一起。

对开发者而言,npm install 这个每天运行无数次的命令背后,存在相当大的供应链攻击面。社区建议的防护措施包括:

  • 使用 pnpm 并开启 minimumReleaseAge: 7d,让新发布的包等待 7 天再安装
  • 定期审计依赖
  • 监控自己的发布管道

但此次攻击从发布到被发现仅用了 20 分钟,7 天等待期也不够。更根本的防护仍需依赖持续的审计和监控。

参考链接

  • TanStack 官方事后复盘
  • GitHub 安全跟踪 Issue
  • Socket Security 攻击追踪
  • StepSecurity 技术分析
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
未经允许不得转载:npm供应链攻击事件:TanStack包被投毒,GitHub密钥面临泄露风险
#npm #供应链安全 #TanStack #GitHub #开发安全 
收藏 1
Advanced-PassGen:跨平台密码生成器,支持批量导出纯文本/CSV/JSON
HTML在Agent生态中崛起:为什么它正在取代PPT成为演示新标准
推荐阅读
  • 又是“最强模型”的一天!Google Gemini 2.5 Pro更新,性能再次跃升
  • Wan 2.6:角色与音色可参考,多镜头更稳定,短视频制作更可控
  • Ovis-Image:7B参数文生图模型终结乱码,吊打 GPT-4o AI 生图“文字渲染”新标杆
  • 麦肯锡《The State of AI》2025 年度报告:AI 的使用已成普遍,但真正把 AI“用好”的企业依然是少数
  • Gemma 4 开源实测:31B 参数跻身全球前三,oMLX + Mac Mini 打造高性价比 AI 底座
评论 (0)
请登录后发表评论
分类精选
Cursor 限制国内使用 Claude 等模型解决方案!
29599 10月前
学生/非学生:如何申请Cursor Pro免费会员,如何通过SheerID验证快速激活全攻略
26688 1年前
注意!Cursor单设备登录新规:一个账户最多可以3台设备登录,且限制单点登录
18321 1年前
即梦AI图片2.1:一句话快速生成带中文的海报图,免费AI文生图、视频工具、AIGC创作工具
18155 1年前
DeepSeek宣布:降价,最高降价75%!别错过这个优惠时段,赶紧充值
15549 1年前
Trae国内版,搭载 doubao-1.5-pro、DeepSeek R1/V3模型,对比 Trae 国际版有什么不同
14852 1年前
字节推出Trae CLI :Claude Code 和 Gemini CLI的国产平替 ?手把手教你如何安装Trae Agent
14255 10月前
刚刚!Cursor风控又加强了,可能是因为这个原因!
14209 1年前
字节跳动发布"扣子空间":AI协同办公的通用Agent平台开启效率革命
13880 1年前
Cline:自动化编程的VSCode插件Claude Dev + Gemini 2.0,快速构建智能应用
11953 1年前

文章目录

关注「苏米客」公众号

订阅推送更及时,手机查看更方便
分类排行
1 AI Agent时代下,Markdown和HTML如何正确分工
2 MiniCPM-V 4.6:1B参数端侧多模态模型发布
3 npm供应链攻击事件:TanStack包被投毒,GitHub密钥面临泄露风险
4 腾讯元宝上线微信群聊一键总结功能,解放双手,快速了解群聊内容
5 阿里云百炼平台大模型半价调用 Qwen3.6-plus、GLM-5.1、DeepSeek-v4-Pro实操指南,还有专属福利!
6 支付宝上线「AI收」功能,AI Agent商业化新突破
7 DeepSeek-V4 蒸馏版本地部署实测:5.6GB 就能跑,推理风格高度还原
8 Mano-P 4B 端侧 GUI Agent实战:本地部署、Cider 加速与三项测试
9 阿里云百炼Token Plan 值不值,三个档位该如何选?
10 卖 API 不够用了:Anthropic 和 OpenAI 同日设立合资公司,把工程师直接派进企业
©2015-2024 苏米客XMSUMI 版权所有 · WWW.XMSUMI.COM 闽ICP备14005900号-6
微信文章助手 程序库 免费影视APP 免费字体下载 Axure RP 10 免费Axure模板 Axure元件库下载 申请友联