nkopylov/tanscript-exploit-check
GitHub: nkopylov/tanscript-exploit-check
针对TanStack npm供应链攻击(CVE-2026-45321)的入侵指标(IOC)自动化检查脚本,用于快速检测开发环境是否被恶意包感染。
Stars: 1 | Forks: 0
# TanStack 供应链攻击 - IOC 检查工具
```
curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash
```
或克隆后本地运行:
```
git clone https://github.com/nkopylov/tanscript-exploit-check.git
cd tanscript-exploit-check
./check-tanstack-exploit.sh [project_dir ...]
```
## 事件经过
**2026年5月11日**(UTC 19:20-19:26),攻击者在6分钟窗口内发布了 **42个 `@tanstack/*` npm 包中的84个恶意版本**。此次攻击是 **TeamPCP** 组织发起的名为 **"Mini Shai-Hulud"** 的大规模攻击活动的一部分,该活动还波及 Mistral AI、UiPath、OpenSearch 等组织的包——在 npm 和 PyPI 上共计超过170个包受到影响。
**没有维护者凭证被盗。** 攻击者通过三阶段攻击利用了 CI/CD 信任链本身:
1. **`pull_request_target` 漏洞利用** — 一个临时 GitHub Fork 提交的 PR 在基础仓库的安全上下文中执行了攻击者代码
2. **GitHub Actions 缓存投毒** — Fork 的代码污染了共享的 pnpm 缓存,随后感染了合法的发布工作流
3. **从进程内存中提取 OIDC 令牌** — 恶意代码直接从 GitHub Actions runner 的内存中提取 npm 发布令牌,生成的包具有 **有效的 SLSA Build Level 3 来源证明**
### 恶意代码的行为
每个被入侵的包中注入了一个 2.3 MB 的混淆载荷(`router_init.js`),执行了以下操作:
- **凭证收集**:GitHub 令牌、AWS 密钥(IMDSv2、Secrets Manager、SSM)、GCP 元数据、Vault 令牌、K8s 服务账户令牌、SSH 密钥、`~/.npmrc` 令牌、Claude Code 会话历史
- **持久化**:向 `.claude/settings.json`、`.vscode/tasks.json` 和 systemd 服务注入钩子
- **数据外泄**:通过加密的 Session/Oxen P2P 网络和 GitHub GraphQL 死信投递提交发送数据
- **自我传播(蠕虫)**:使用被盗的 OIDC 令牌将自身重新发布到同一维护者拥有的其他包中
- **死手开关**:如果 GitHub 令牌在活动期间被撤销,载荷会尝试执行 `rm -rf ~/`
恶意版本在 **约20分钟内** 被 StepSecurity 研究员 **ashishkurmi** 发现,并于当天 **UTC 21:03** 被废弃。
## 本脚本检查的内容
| # | 检查项 | 描述 |
|---|--------|------|
| 1 | 死手开关 | LaunchAgent/systemd 持久化守护进程(`gh-token-monitor`) |
| 2 | 恶意进程 | 已知攻击者进程名称 |
| 3 | 载荷文件 | 按名称和 SHA-256 哈希识别的已知恶意文件 |
| 4 | Claude Code 钩子 | `.claude/settings.json` 中注入的钩子 |
| 5 | VS Code 任务 | `.vscode/tasks.json` 中注入的任务 |
| 6 | GitHub Actions | 泄露密钥的 `codeql_analysis.yml` 工作流 |
| 7 | npm 锁定文件 | 锁定文件中被入侵的包版本 |
| 8 | optionalDependencies | 恶意 `@tanstack/setup` 依赖标记 |
| 9 | 网络连接 | 与攻击者 C2 基础设施的活跃连接 |
| 10 | DNS 缓存 | 攻击者域名的历史解析记录 |
| 11 | Git 分支 | Dune 主题的攻击者分支命名模式 |
## 受影响的包
仅 `@tanstack/router*` 和 `@tanstack/start*` 生态包受到影响。**未受影响:** `@tanstack/query*`、`@tanstack/table*`、`@tanstack/form*`、`@tanstack/virtual*`、`@tanstack/store`。
主要被入侵版本(每个包有2个恶意版本):
| 包 | 恶意版本 | 首个安全版本 |
|---|---------|--------------|
| `@tanstack/react-router` | 1.169.5, 1.169.8 | 1.169.9 |
| `@tanstack/router-core` | 1.169.5, 1.169.8 | 1.169.9 |
| `@tanstack/vue-router` | 1.169.5, 1.169.8 | 1.169.9 |
| `@tanstack/solid-router` | 1.169.5, 1.169.8 | 1.169.9 |
| `@tanstack/react-start` | 1.167.68, 1.167.71 | 1.167.72 |
| `@tanstack/router-plugin` | 1.167.38, 1.167.41 | 1.167.42 |
查看全部42个包请参阅 [完整安全公告](https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx)。
## 修复措施(如已受感染)
1. 终止 `gh-token-monitor` 进程并移除 LaunchAgent/systemd 服务
2. 删除持久化文件(`.claude/router_runtime.js`、`.vscode/setup.mjs` 等)
3. 删除 `node_modules` 和锁定文件,使用 `--ignore-scripts` 重新安装
4. **轮换所有凭证**(npm、GitHub、AWS、GCP、SSH 密钥等)
5. 在 DNS/防火墙层面阻止攻击者域名(`api.masscan.cloud`、`filev2.getsession.org`、`git-tanstack.com`)
6. 审计云服务商在2026年5月11-12日的日志
## 官方公告与参考
- **CVE-2026-45321**(CVSS 9.6 严重)— [CVE 记录](https://www.cve.org/CVERecord?id=CVE-2026-45321)
- **GHSA-g7cv-rxg3-hmpx** — [GitHub 安全公告](https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx)
- **TanStack 事后复盘** — [tanstack.com/blog/npm-supply-chain-compromise-postmortem](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem)
- **TanStack 加固跟进** — [tanstack.com/blog/incident-followup](https://tanstack.com/blog/incident-followup)
- **GitHub 跟踪 Issue** — [TanStack/router#7383](https://github.com/TanStack/router/issues/7383)
- **Tanner Linsley 在 X 上** — [x.com/tannerlinsley/status/2053949930784645170](https://x.com/tannerlinsley/status/2053949930784645170)
### 安全研究员分析文章
- [Socket.dev](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack)
- [Snyk](https://snyk.io/blog/tanstack-npm-packages-compromised/)
- [StepSecurity](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem)(原始发现者)
- [Wiz](https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised)
- [Orca Security](https://orca.security/resources/blog/tanstack-npm-supply-chain-worm/)
- [SecurityWeek](https://www.securityweek.com/tanstack-mistral-ai-uipath-hit-in-fresh-supply-chain-attack/)
## AI 编程代理加固提示词
将以下提示词复制粘贴到你的 AI 编程代理(Claude Code、Cursor、Cline/OpenClaw、Windsurf、Hermes 等)中,以加固你的项目,防范此类供应链攻击。
### 提示词 1:npm 发布延迟(新版本隔离)
### 提示词 2:加固 AI 代理配置
### 提示词 3:GitHub Actions 加固
## 许可证
MIT
标签:CI/CD安全, Cutter, CVE-2026-45321, GitHub Actions攻击, HTTP工具, IOC检查工具, IP 地址批量处理, Llama, Mini Shai-Hulud, npm供应链攻击, OIDC令牌窃取, pnpm, pull_request_target漏洞, Shell脚本, StruQ, TanStack, 凭证采集, 安全扫描工具, 应用安全, 恶意包检测, 无线安全, 暗色界面, 缓存污染, 网络安全审计