Intrudify/mini-shai-hulud-scanner
GitHub: Intrudify/mini-shai-hulud-scanner
一款离线免费的安全扫描工具,用于检测大规模感染 npm/PyPI 生态的 Mini Shai-Hulud 供应链蠕虫,覆盖持久化后门、C2 通信、勒索 Token 陷阱等 19 项已知失陷指标。
Stars: 2 | Forks: 0
# Mini Shai-Hulud 扫描程序
一款免费、离线的扫描程序,用于检测目前正大规模感染主流软件包的 npm/PyPI 供应链蠕虫病毒。由 [Intrudify](https://intrudify.com) 团队构建。无需注册,无遥测数据,完全离线运行。
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
## 这是什么
如果你在过去几周内运行过 `npm install` 或 `pip install`,这就是为你准备的。
尤其是当你使用过 `@tanstack/*`、`@uipath/*`、`@mistralai/*`、`@cap-js/*`,或是 PyPI 的 `litellm`、`mistralai`、`guardrails-ai`、`lightning` 或 `telnyx` 时。这些是已确认被投毒的命名空间。目前共追踪到 149 个软件包和 400+ 个恶意版本。
**Mini Shai-Hulud** 就是造成破坏的蠕虫病毒。它会窃取你的 npm 和 GitHub 凭证,在 macOS、Linux 和 Windows 上植入持久化控制,并且(大多数人忽略的一点)会留下一个陷阱 token。如果在受感染的机器上撤销该 token,就会触发 `rm -rf ~/`。你的家目录将不复存在。清理的顺序至关重要。
本扫描程序会检查软件包、lockfile、持久化机制、payload 哈希、C2 流量、git 历史记录和 CI 环境中所有 19 个已知的中毒指标 (IoC)。它仅执行读取操作。绝不进行写入、删除或向外发送数据。
三个脚本,一个目标:Python、Bash、PowerShell。请选择适合你技术栈的一个。
## 为什么我们要开发这个工具
[Intrudify](https://intrudify.com) 是欧洲首个用于 Web 应用程序的完全自主 AI 渗透测试工具。我们的理念很简单:提供与价值 3 万美元的人工渗透测试团队相同的输出结果,在几小时而非几周内交付,并附带符合审计要求的报告以及针对 NIS2、SOC2 和 ISO27001 的逐步修复指南。如果你在交付代码但没有安全团队,这正是我们能帮你填补的空白。
这款扫描程序就是其中的一部分。它之所以免费,是因为供应链蠕虫的传播速度远超采购周期。一个在晚上 11 点盯着 CVE 订阅源的开发人员不需要打销售电话。他们需要的是一个能在 30 秒内运行完毕并告诉他们是否已中招的工具。
如遇活跃的入侵事件(CI/CD 流水线劫持、GitHub Actions OIDC token 滥用、npm/PyPI 供应链应急响应),请直接联系我们:**marc@intrudify.com**
如果你在过去几周内安装过任何 npm 或 PyPI 软件包,尤其是来自 `@tanstack/*`、`@uipath/*`、`@mistralai/*`、`@cap-js/*` 或是 PyPI 的 `litellm`、`mistralai`、`guardrails-ai`、`lightning`、`telnyx` 的任何内容,你的机器可能已被感染。
**Mini Shai-Hulud** 蠕虫会窃取凭证,在 macOS、Linux 和 Windows 上植入持久化控制,并且如果你以错误的顺序进行清理,它可能会抹除你的家目录。
本扫描程序会检查所有 19 个已知指标。它仅执行读取操作。绝不进行写入、删除或从你的机器上发送任何内容。
## 运行前:请先阅读本节
该蠕虫会植入一个陷阱 npm token。从受感染的机器上撤销该 token 会触发 `rm -rf ~/`。操作顺序至关重要。
**如果扫描程序发现 CRITICAL(严重)级别的结果,请按以下顺序操作:**
1. **断开** 机器的网络连接(拔掉网线或关闭 Wi-Fi)
2. **拍摄快照或磁盘映像**,然后再进行任何操作
3. **从另一台机器上**,登录 npmjs.com 和 GitHub 并在那里撤销 token
4. 然后再清理受感染的机器
## 如何运行:3 个步骤
### 步骤 1:选择你的脚本
| 你的系统... | 使用此脚本 |
|---|---|
| macOS 或 Linux | `scan_cc4781.sh`(如果你更习惯 Python,也可以使用 `scan_cc4781.py`) |
| Windows | `scan_cc4781.ps1`(或配合原生 Python 使用 `scan_cc4781.py`) |
| CI / Docker | `scan_cc4781.py` 或 `scan_cc4781.sh` |
### 步骤 2:在你的项目文件夹中运行
```
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
```
```
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
```
```
# Python (任何操作系统)
python3 scan_cc4781.py --deep
```
`--deep` / `-Deep` 标志会递归进入当前目录下的所有 `node_modules`。如果你使用 monorepo 或有多个项目,建议使用此选项。
如果 PowerShell 阻止了脚本运行:
```
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
```
### 步骤 3:阅读结果
```
RESULT: 0 CRITICAL / 0 HIGH → you're clean
RESULT: X CRITICAL / Y HIGH → stop and follow the steps above before doing anything else
```
`CRITICAL` = 已确认的中毒指标。请立即采取行动。
`HIGH` = 可疑。需进行调查。某些 HIGH 结果属于预期的误报(见下文)。
## 正常机器上的预期输出
```
CC-4781 / Mini Shai-Hulud Supply-Chain Attack Scanner
Host: your-hostname OS: your-os
Checking 149 npm packages (400+ malicious versions), 5 PyPI packages
[OK] gh-token-monitor process not detected
[HIGH] payload-artefact: sysmon.py -> .../coverage/sysmon.py <- false positive: Python coverage package
[HIGH] payload-artefact: execution.js -> .../n8n/.../execution.js <- false positive: n8n
[OK] git-tanstack.com does not resolve
[OK] No malicious optionalDependencies github: references found
[OK] No attacker exfil commits in git log
RESULT: 0 CRITICAL / 4 HIGH
```
`sysmon.py` 和 `execution.js` 的 HIGH 结果属于**误报**:文件名与蠕虫的 payload 名称匹配,但 SHA-256 哈希值不匹配。只有当哈希值与已确认的恶意 payload 匹配时,才会触发 CRITICAL 级别的警报。
## 所有命令行标志
| 标志 | Bash / Python | PowerShell | 功能描述 |
|---|---|---|---|
| 深度扫描 | `--deep` | `-Deep` | 递归扫描 CWD 下的所有 `node_modules` |
| 目标目录 | `--npm-dir /path` | `-NpmDir C:\path` | 扫描指定的 `node_modules` 文件夹 |
| JSON 输出 | `--json` | `-Json` | 用于 SIEM / SOAR 的机器可读输出 |
JSON 输出格式:`{ "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }`
## 扫描程序检查的内容(19 项指标)
| # | 类别 | 检查目标 |
|---|---|---|
| 1 | npm 版本 | 149 个软件包,400+ 已确认的恶意确切版本 |
| 2 | Lockfile | `package-lock.json`、`pnpm-lock.yaml`、`yarn.lock` |
| 3 | PyPI | `litellm`、`telnyx`、`lightning`、`mistralai`、`guardrails-ai` |
| 4 | 持久化控制 | macOS LaunchAgent、Linux systemd、Windows 计划任务 + HKCU Run 键值 |
| 5 | 持久化控制 | Claude Code `SessionStart` 钩子,VS Code `folderOpen` 任务 |
| 6 | Payload 文件 | 13 个文件名 + SHA-256 匹配 11 个已知的恶意哈希值 |
| 7 | C2 主机 | `/etc/hosts` 中的 11 个域名、代理环境变量、WinHTTP |
| 8 | C2 DNS | 解析全部 11 个 C2 域名 |
| 9 | C2 连接 | 到 5 个被追踪 C2 IP 的活跃 TCP 连接 |
| 10 | `package.json` | `optionalDependencies github:tanstack/router` 注入 |
| 11 | `package.json` | `prepare: bun run tanstack_runner.js` 注入 |
| 12 | Workflows | `.github/workflows/codeql_analysis.yml`、`format-check.yml` |
| 13 | Git 日志 | 攻击者数据外泄提交(`claude@users.noreply.github.com`) |
| 14 | Git 分支 | 沙丘主题的蠕虫分支、`dependabout/` 误植域名 |
| 15 | npm Token | RANSOM TOKEN 检测 |
| 16 | Shell 历史记录 | C2 域名、IP、payload 文件名 |
| 17 | CI 环境 | GitHub Actions 凭证泄露 |
| 18 | Git 远程仓库 | 攻击者账号和 C2 域名 |
| 19 | 高级持久化控制 | `sysmon`/`pgmon` 服务伪装、`litellm_init.pth`、Kubernetes DaemonSet、WAV 隐写术 |
## 涵盖的攻击波次
| 波次 | 日期 | 软件包 | 发布者 |
|---|---|---|---|
| TanStack | 2026 年 5 月 | 43 个 `@tanstack/*` 软件包 | `voicproducoes` |
| UiPath / JFrog | 2026 年 5 月 | 66 个 `@uipath/*` 软件包 | `voicproducoes` / `zblgg` |
| SAP @cap-js | 2026 年 4 月 | `@cap-js/db-service`、`@cap-js/sqlite`、`@cap-js/postgres`、`mbt` | `cloudmtabot` |
| PyPI | 2026 年 2 月--4 月 | `litellm`、`telnyx`、`lightning`、`mistralai`、`guardrails-ai` | 多个 |
**重要提示:** `npm audit signatures` 通过**并不**代表你绝对安全。Mini Shai-Hulud 是首个有记录的、通过 GitHub Actions OIDC 流水线劫持生成有效 SLSA Build Level 3 来源的攻击。签名验证的是构建来源,并不能证明构建流水线本身是干净的。
## 技术背景
该蠕虫采用三层混淆:obfuscator.io,接着是 Fisher-Yates 替换密码(PBKDF2-SHA256,20 万次迭代),最后是 AES-256-GCM。它通过 Session Protocol CDN、GitHub GraphQL 死信drop、ICP 区块链容器以及 WAV 隐写术来外泄凭证。
持久化控制会伪装成 macOS LaunchAgent、Linux systemd 单元、Windows 计划任务或 HKCU Run 键值、Claude Code `SessionStart` 钩子、VS Code `folderOpen` 任务以及 Python `.pth` 启动文件植入。在受感染的 CI Runner 上,它会植入一个 Kubernetes DaemonSet。
这个 RANSOM TOKEN(`IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner`)与一个名为 `gh-token-monitor` 的守护进程配对,该守护进程每 60 秒轮询一次 `api.github.com/user`。一旦收到 40x 状态码的响应,就会在 Linux/macOS 上触发 `rm -rf ~/` 或在 Windows 上执行等效的操作。
## IOC 来源
汇总自 GHSA-g7cv-rxg3-hmpx、JFrog Security Research、StepSecurity、Socket.dev、Wiz Threat Research、Snyk、Aikido Security、Orca Security、Mend.io(截至 2026-05-13)。
检测规则:Sigma `5299fadf-f228-4526-8274-251db1960be9`(Shai-Hulud 恶意 Bun 执行),Palo Alto ATP 签名 `87120`。
## 参考链接
- [NHS CC-4781](https://digital.nhs.uk/cyber-alerts/2026/cc-4781)
- [GHSA-g7cv-rxg3-hmpx](https://github.com/advisories/GHSA-g7cv-rxg3-hmpx)
- [CVE-2026-45321](https://nvd.nist.gov/vuln/detail/CVE-2026-45321)
- [StepSecurity: Mini Shai-Hulud 卷土重来](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem)
- [JFrog: Shai-Hulud here we go again](https://research.jfrog.com/post/shai-hulud-here-we-go-again/)
- [Wiz: Mini Shai-Hulud 再次发动攻击](https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised)
## 需要帮助处理活跃的入侵事件?
Intrudify 专注于 npm/PyPI 供应链应急响应(IR)、CI/CD 流水线劫持以及 GitHub Actions OIDC token 滥用。
**联系方式:[marc@intrudify.com](mailto:marc@intrudify.com) · [intrudify.com](https://intrudify.com)**
标签:AI合规, Bash, C2通信检测, CI/CD安全, CVE扫描器, DevSecOps, DNS 解析, gh-token-monitor, GitHub凭据窃取, Home目录擦除, IoC检测, IPv6, IP 地址批量处理, Llama, npm安全, PowerShell, PyPI安全, Python, 上游代理, 令牌监控, 安全应急响应, 应用安全, 持久化后门, 无后门, 漏洞检测工具, 网络安全, 跨平台脚本, 软件供应链攻击, 逆向工具, 隐私保护