---
title: npm 历史上首个蠕虫式供应链攻击：会自我传播
date: 2026-05-13T09:11:02Z
modified: 2026-05-13T09:11:24Z
permalink: "https://www.appinn.com/tanstack-npm-compromise/"
type: post
status: publish
excerpt: ""
categories:
  - 业界消息
tags:
  - 业界消息
  - npm
  - 供应链攻击
featured_image: "https://www.appinn.com/wp-content/uploads/2026/05/Copy-of-appinn-homework-2026-05-13T170049.096.jpg"
author: 青小蛙
timestamp: 2026-05-13T09:11:24Z
---

npm 出现了新攻击方式：TanStack Router 官方 npm 包被植入恶意代码。攻击者入侵了项目发布流程，上传了带后门的官方版本。这些包会窃取开发者电脑里的各种密钥，并尝试继续感染开发者拥有权限的其他 GitHub 仓库，再借 npm 进一步传播。

令人绝望的是：它绕过了现代 npm 生态最核心的一整套“信任链”：

- 发布者**是真的**
- 官方账号**是真的**
- CI **是真的**
- provenance **是真的**
- npm 签名**也是真的**

但发布出去的代码，是恶意的。

另外，有安全研究员认为，这是 npm 历史上第一次出现真正“会自我传播”的蠕虫式供应链攻击。

![](https://www.appinn.com/wp-content/uploads/2026/05/Copy-of-appinn-homework-2026-05-13T170049.096.jpg)

## 到底发生了什么？

这次出问题的是 TanStack Router，一个非常流行的 JavaScript 路由库，在 npm 上每周下载量超过数百万次，被大量前端项目使用。

攻击者先从临时分枝提交了一段恶意代码。虽然这个提交很快就被关闭了，但项目的自动化系统还是运行了它。

这段代码随后污染了 CI 缓存。后来，另一个完全正常的更新触发正式发布流程时，系统再次读取了这个缓存，最终把恶意代码一起打包进了官方 npm 版本里。

TanStack [复盘](https://tanstack.com/blog/incident-followup?utm_source=chatgpt.com)的时候说：

- 没有维护者被钓鱼
- 没有密码泄漏
- 团队成员都开启双因素认证（2FA）
- 也没有 npm Token 被偷

### 攻击链大概是：

攻击者先提交一个恶意 PR
↓
这个 PR 触发了 GitHub Actions
↓
CI 在运行过程中执行了攻击者代码
↓
攻击者污染了 CI 缓存（cache poisoning）
↓
正式发布流程再次读取这个缓存
↓
恶意代码进入官方 release pipeline
↓
CI 自己生成合法 OIDC 发布凭据
↓
官方流程亲手发布了恶意 npm 包

![](https://www.appinn.com/wp-content/uploads/2026/05/ChatGPT-Image-2026-5-13-17_06_17.avif)

### 更可怕的是

这些恶意包并不是伪造的“假包”，而是真正通过官方流程发布出来的。

- 包是官方账号发布的
- npm 签名正常
- provenance / SLSA 验证通过

攻击者甚至没有入侵 npm 账号，他们只是提交了一个 Pull Request，随后利用项目自动化流程中的漏洞，把恶意代码混进了官方发布版本。

## **为什么说它是“蠕虫”？** 

普通的包中毒只是“守株待兔”，等你去下。

普通的投毒是需要开发者、用户去下载、安装，才会中招。

但这个恶意代码只要你在本地运行了它，它就会立刻扫描你的电脑，偷走你的 npm 令牌和 GitHub 密钥。

然后，它会利用你的权限，自动去翻你参与过的其他 GitHub 仓库，悄悄修改它们的 CI 配置，**这意味着，你维护的其他项目，在下一次自动化构建时，都会变成新的毒源。**

而这个过程，不就是蠕虫病毒（Computer Worm）吗？

**蠕虫病毒是一种通过网络自动传播的独立恶意程序，无需人工干预即可利用系统漏洞自我复制。**

## **这标志着“盲目信任”时代的终结。** 

过去，我们总觉得，只要不下载莫名其妙的安装包、看准官方认证、官网，守护好自己的账号，应该就安全了，稳了！

但现在，你甚至不能信任「官方渠道的上游代码」，就有点残酷了。

这就好比在某官方旗舰店购买了一台手机，虽然旗舰店是真的、手机外包装也是真的、甚至数据线都是真的，但手机是假的。

**在这个自动化的时代，可能除了自己写的那几行代码，其它的你都得留个心眼。**

（现实是，自己的代码也是 AI 写的…）

### 建议

**手上的项目，先别着急升级，让子弹飞一会，等个一周两周的，再去碰最新的代码**。

---

原文：https://www.appinn.com/tanstack-npm-compromise/

另外，npm 攻击已经…很多次了 😭

光青小蛙注意到的就有：

- [又是 npm 包投毒，密码管理器 Bitwarden CLI 中招（放心：本体安全）](https://www.appinn.com/bitwarden-cli-npm-supply-chain-attack-2026.md)
- [axios 又出事了：npm 两个版本被供应链投毒](https://www.appinn.com/axios-supply-chain-attack-two-versions.md)

攻击者都不直接攻击最终用户，而是先污染开发者依赖的 npm 包。只要拿下了自动化路径中的某一点，就能完成攻击。

## Topics

**分类目录:** [业界消息](https://www.appinn.com/category/it-news/?output_format=md)

**标签:** [npm](https://www.appinn.com/tag/npm/?output_format=md), [供应链攻击](https://www.appinn.com/tag/%e4%be%9b%e5%ba%94%e9%93%be%e6%94%bb%e5%87%bb/?output_format=md)