qi-scape/scan-shai-hulud
GitHub: qi-scape/scan-shai-hulud
一款零依赖的 Bash 脚本,用于快速检测系统是否受到 CVE-2026-45321「Mini Shai-Hulud」大规模供应链攻击的影响,覆盖恶意包、C2 通信、持久化后门和 Git 历史篡改等八大维度的排查。
Stars: 1 | Forks: 1
# scan-shai-hulud
一个快速、零依赖的 Bash 扫描器,用于检测您的机器是否受到 **CVE-2026-45321 "Mini Shai-Hulud"** 供应链攻击的影响。
2026 年 5 月 11 日,横跨 TanStack、Mistral AI、UiPath、OpenSearch 和 Guardrails AI 的超过 **170 个 npm 包**和 **2 个 PyPI 包**同时被注入恶意代码。该恶意负载会窃取 AWS 凭证、GitHub token、npm token、Vault 密钥和 SSH 密钥——并且包含一个通过 CI/CD 管道进行传播的自传播蠕虫。
## 快速开始
```
curl -fsSL https://raw.githubusercontent.com/qi-scape/scan-shai-hulud/main/scan-shai-hulud.sh | bash
```
或者克隆并运行:
```
git clone https://github.com/qi-scape/scan-shai-hulud.git
cd scan-shai-hulud
chmod +x scan-shai-hulud.sh
./scan-shai-hulud.sh
```
## 用法
```
# 扫描当前目录 + 系统级持久性检查
./scan-shai-hulud.sh
# 扫描特定项目
./scan-shai-hulud.sh ~/my-project
# 遍历整个 home 目录的深度扫描
./scan-shai-hulud.sh --full
```
## 检查内容
该扫描器运行 8 个步骤:
| 步骤 | 描述 |
|------|-------------|
| **持久化** | macOS LaunchAgent(文件 + `launchctl` 加载状态)、Linux systemd 服务、防僵停脚本、`.claude/` 和 `.vscode/` 负载投放、注入的 GitHub Actions 工作流、`/tmp` 投放器 |
| **恶意文件** | `router_init.js`、`tanstack_runner.js`、`router_runtime.js`、`gh-token-monitor.sh`、`transformers.pyz`——根据 3 个已知 SHA-256 哈希值进行验证 |
| **C2 指标** | 扫描配置文件(`.npmrc`、`.bashrc`、`.zshrc`、`.env`)和项目源代码,查找 6 个 C2 域名及活动标记 |
| **npm 包** | 所有 `node_modules` 树、npm 全局根目录、lockfile(`package-lock.json`、`yarn.lock`、`pnpm-lock.yaml`、`bun.lock`)、npm 缓存——进行精确的按包匹配(42 个特定的 @tanstack router 包,而非整个范围) |
| **PyPI 包** | 跨所有 Python/conda 环境执行 `pip show` + `requirements.txt`、`pyproject.toml`、`Pipfile`、`poetry.lock` |
| **Git 仓库** | 历史记录中的恶意 commit hash、`dependabout/*/setup-formatter` 死信分支、死信 commit 作者、注入的 `codeql_analysis.yml` |
| **Shell 历史与环境** | Bash/Zsh/Fish 历史记录中用于查找负载执行痕迹、shell RC 文件中的注入内容、用于查找 C2 域名的环境变量 |
| **网络与 Token** | 通过 `lsof` 识别与 C2 的活动连接、`/etc/hosts`、`~/.ssh/known_hosts`、npm token 列表 |
## 受影响的包
横跨 15 个作用域的 **170 个 npm 包**:
- **@tanstack**(42 个包)——仅限 router 生态系统(`react-router`、`vue-router`、`solid-router`、`router-core` 等)
- **@uipath**(65 个包)——完整的自动化工具套件
- **@squawk**(20 个包)——航空数据包
- **@tallyui**(10 个包)——POS/连接器包
- **@mistralai**(3 个包)——`mistralai`、`mistralai-azure`、`mistralai-gcp`
- **@opensearch-project**(1 个包)——`opensearch`
- **@beproduct**、**@draftauth**、**@draftlab**、**@supersurkhet**、**@taskflow-corp**、**@tolka**、**@mesadev**、**@ml-toolkit-ts**、**@dirigible-ai**
- **无作用域**:`agentwork-cli`、`cmux-agent-mcp`、`cross-stitch`、`git-branch-selector`、`git-git-git`、`ml-toolkit-ts`、`nextmove-mcp`、`safe-action`、`ts-dna`、`wot-api`
**2 个 PyPI 包**:
- `mistralai==2.4.6`
- `guardrails-ai==0.10.1`
## C2 基础设施
| 指标 | 值 |
|-----------|-------|
| 主要数据外发 | `filev2.getsession.org` |
| 会话种子 | `seed{1,2,3}.getsession.org` |
| 次要 C2 | `api.masscan.cloud`、`git-tanstack.com` |
| 负载暂存 | `litter.catbox.moe/h8nc9u.js`、`litter.catbox.moe/7rrc6l.mjs` |
| 恶意 commit | `79ac49eedf774dd4b0cfa308722bc463cfe5885c` |
## 如果您发现了异常
如果扫描器报告了 **CRITICAL**(严重)发现:
1. **轮换所有**可从受影响机器访问的凭证——AWS 密钥、GitHub token(`ghp_*`、`gho_*`、`ghs_*`)、npm token、Vault token、SSH 密钥、Kubernetes 服务账号 token
2. **移除恶意包**——`npm cache clean --force && rm -rf node_modules && npm install`
3. **移除持久化**——`launchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist`
4. 在 DNS/代理层面**阻止 C2 域名**
5. **审计自** `2026-05-11T19:20Z` **以来的 GitHub Actions** 运行记录
6. **检查未经授权的 npm 发布**——`npm access ls-packages`
## 参考
- [CVE-2026-45321](https://www.cve.org/CVERecord?id=CVE-2026-45321) — CVSS 9.6 严重
- [GHSA-g7cv-rxg3-hmpx](https://github.com/advisories/GHSA-g7cv-rxg3-hmpx) — GitHub 安全公告
- [TanStack 事后分析](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem)
- [Aikido: Mini Shai-Hulud 卷土重来](https://www.aikido.dev/blog/mini-shai-hulud-is-back-tanstack-compromised)
- [SafeDep: 大规模供应链攻击](https://safedep.io/mass-npm-supply-chain-attack-tanstack-mistral/)
- [Snyk: TanStack 遭入侵](https://snyk.io/blog/tanstack-npm-packages-compromised/)
- [The Hacker News 报道](https://thehackernews.com/2026/05/mini-shai-hulud-worm-compromises.html)
## 系统要求
- Bash 4+(macOS 自带 3.x,但该脚本兼容)
- 标准 UNIX 实用工具(`find`、`grep`、`shasum`)
- 可选:`mdfind`(macOS Spotlight,用于更快的文件搜索)
- 可选:`npm`、`pip`(用于包/token 检查)
- 可选:`git`(用于仓库检查)
- 可选:`lsof`(用于网络连接检查)
## 许可证
MIT
标签:C2通信检测, CI/CD安全, CISA项目, Cutter, CVE-2026-45321, DevSecOps, DNS 反向解析, DNS 解析, IP 地址批量处理, Llama, Mini Shai-Hulud, npm包安全, PyPI包安全, 上游代理, 凭据窃取, 包管理器安全, 安全合规, 库, 应急响应, 应用安全, 恶意软件扫描, 持久化检测, 暗色界面, 网络代理, 网络安全研究, 蠕虫病毒