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, 上游代理, 令牌监控, 安全应急响应, 应用安全, 持久化后门, 无后门, 漏洞检测工具, 网络安全, 跨平台脚本, 软件供应链攻击, 逆向工具, 隐私保护