针对 Mini Shai-Hulud npm/PyPI 供应链蠕虫的扫描器 (NHS CC-4781 · CVE-2026-45321)。检测 gh-token-monitor 持久化、有效载荷痕迹和攻击者提交。Python, Bash, PowerShell.
一个免费、离线的扫描器,用于检测当前正在吞噬主要软件包的 npm/PyPI 供应链蠕虫。由 Intrudify 团队开发。无需注册,无遥测,完全离线运行。
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 上植入持久化机制,并且(大多数人忽略的部分)会留下一个经过篡改的令牌。如果在被感染的机器上撤销该令牌,它会触发 rm -rf ~/。你的主目录将不复存在。清理顺序至关重要。
此扫描器会检查所有 19 个已知的入侵指标,涵盖软件包、锁定文件、持久化机制、有效载荷哈希、C2 通信、Git 历史和 CI 环境。它仅读取,从不写入、删除或向外发送数据。
三个脚本,一个任务:Python、Bash、PowerShell。选择适合你技术栈的那个。
Intrudify 是欧洲第一家完全自主的 Web 应用 AI 渗透测试服务。核心理念很简单:输出与价值 3 万美元的人工渗透测试团队相同,交付时间缩短为几小时而非数周,并提供可审计的报告以及针对 NIS2、SOC2 和 ISO27001 的逐步修复指导。如果你发布代码但没有安全团队,这就是我们填补的空白。
这个扫描器正是其中的一部分。它是免费的,因为供应链蠕虫的传播速度比采购周期快得多。一个在晚上 11 点盯着 CVE 动态的开发者不需要销售电话。他们需要一个能在 30 秒内运行并告诉他们是否中招的工具。
对于主动入侵(CI/CD 管道劫持、GitHub Actions OIDC 令牌滥用、npm/PyPI 供应链应急响应),请直接联系我们:[email protected]
如果你在过去几周内安装了 npm 或 PyPI 软件包,尤其是来自 @tanstack/*、@uipath/*、@mistralai/*、@cap-js/* 或 PyPI 的 litellm、telnyx、lightning、mistralai、guardrails-ai 的任何内容,你的机器可能已被入侵。
Mini Shai-Hulud 蠕虫会窃取凭据,在 macOS、Linux 和 Windows 上植入持久化机制,如果你以错误的顺序进行清理,它可能会擦除你的主目录。
此扫描器会检查所有 19 个已知指标。它仅读取,从不写入、删除或向机器外部发送任何内容。
该蠕虫会植入一个经过篡改的 npm 令牌。在被感染的机器上撤销该令牌会触发 rm -rf ~/。顺序至关重要。
如果扫描器发现了严重发现,请按以下顺序操作:
| 你所用的系统... | 使用这个 |
|---|
# 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。如果你有单体仓库或多个项目,建议使用此选项。
如果 PowerShell 阻止了该脚本:
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULT: 0 CRITICAL / 0 HIGH → 你安全了
RESULT: X CRITICAL / Y HIGH → 停止并先执行上述步骤,然后再做其他事情
CRITICAL = 确认的入侵指标。立即采取行动。
HIGH = 可疑。进行调查。某些 HIGH 发现是预期的误报(见下文)。
CC-4781 / Mini Shai-Hulud Supply-Chain Attack Scanner
Host: 你的主机名 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 <- 误报:Python coverage 包
[HIGH] payload-artefact: execution.js -> .../n8n/.../execution.js <- 误报: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 发现是误报:文件名匹配蠕虫的有效载荷名称,但 SHA-256 哈希不匹配。只有哈希匹配已确认恶意有效载荷时,才会触发 CRITICAL。
JSON 输出格式:{ "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
重要提示: 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 死信投递点、ICP 区块链容器以及 WAV 隐写术来窃取凭据。
持久化机制被植入为:macOS LaunchAgent、Linux systemd 单元、Windows 计划任务或 HKCU Run 键值、Claude Code SessionStart 钩子、VS Code folderOpen 任务,以及 Python .pth 启动文件。在被入侵的 CI 运行器上,它会植入一个 Kubernetes DaemonSet。
赎金令牌(IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner)与一个 gh-token-monitor 守护进程配对,该守护进程每 60 秒轮询 api.github.com/user。40x 响应会触发 macOS/Linux 上的 rm -rf ~/ 或 Windows 上的等效操作。
汇总自 GHSA-g7cv-rxg3-hmpx、JFrog 安全研究、StepSecurity、Socket.dev、Wiz 威胁研究、Snyk、Aikido Security、Orca Security、Mend.io(截至 2026-05-13)。
检测规则:Sigma 5299fadf-f228-4526-8274-251db1960be9(Shai-Hulud 恶意 Bun 执行),Palo Alto ATP 签名 87120。
Intrudify 专注于 npm/PyPI 供应链应急响应、CI/CD 管道劫持以及 GitHub Actions OIDC 令牌滥用。
联系方式:[email protected] · intrudify.com
| macOS 或 Linux | scan_cc4781.sh(或 scan_cc4781.py,如果你更喜欢 Python) |
| Windows | scan_cc4781.ps1(或使用原生 Python 运行 scan_cc4781.py) |
| CI / Docker | scan_cc4781.py 或 scan_cc4781.sh |
| 标志 | Bash / Python | PowerShell | 作用 |
|---|
| 深度扫描 | --deep | -Deep | 递归扫描当前工作目录下的所有 node_modules |
| 目标目录 | --npm-dir /path | -NpmDir C:\path | 扫描特定的 node_modules 文件夹 |
| JSON 输出 | --json | -Json | 机器可读的输出,用于 SIEM / SOAR |
| # | 类别 | 检查内容 |
|---|
| 1 | npm 版本 | 149 个包,400 多个已确认恶意的精确版本 |
| 2 | 锁定文件 | 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 | 有效载荷文件 | 13 个文件名 + 针对 11 个已知恶意哈希的 SHA-256 校验 |
| 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 | 工作流 | .github/workflows/codeql_analysis.yml、format-check.yml |
| 13 | Git 日志 | 攻击者数据外泄提交([email protected]) |
| 14 | Git 分支 | Dune 主题的蠕虫分支、dependabout/ 域名仿冒 |
| 15 | npm 令牌 | 赎金令牌检测 |
| 16 | Shell 历史 | C2 域名、IP、有效载荷文件名 |
| 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 | 不同发布者 |