
Detecte CVE-2026-45321 comprometimento da cadeia de suprimentos Mini Shai-Hulud — verifica 170 pacotes npm + 2 PyPI envenenados em TanStack, Mistral AI, UiPath, OpenSearch, Guardrails AI
Um scanner Bash rápido, sem dependências, para detectar se sua máquina é afetada pelo ataque à cadeia de suprimentos CVE-2026-45321 "Mini Shai-Hulud".
Em 11 de maio de 2026, mais de 170 pacotes npm e 2 pacotes PyPI em TanStack, Mistral AI, UiPath, OpenSearch e Guardrails AI foram envenenados simultaneamente. O payload malicioso rouba credenciais AWS, tokens GitHub, tokens npm, segredos Vault e chaves SSH — e inclui um worm auto-propagável que se espalha por pipelines CI/CD.
curl -fsSL https://raw.githubusercontent.com/qi-scape/scan-shai-hulud/main/scan-shai-hulud.sh | bash
Ou clone e execute:
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
# Escaneia o diretório atual + verificações de persistência no sistema
./scan-shai-hulud.sh
# Escaneia um projeto específico
./scan-shai-hulud.sh ~/meu-projeto
# Escaneamento profundo em todo o diretório home
./scan-shai-hulud.sh --full
O scanner executa 8 etapas:
170 pacotes npm em 15 escopos:
react-router, vue-router, solid-router, router-core, etc.)mistralai, mistralai-azure, mistralai-gcpopensearchagentwork-cli, cmux-agent-mcp, cross-stitch, , , , , , , 2 pacotes PyPI:
mistralai==2.4.6guardrails-ai==0.10.1Se o scanner relatar achados CRÍTICOS:
ghp_*, gho_*, ghs_*), tokens npm, tokens Vault, chaves SSH, tokens de conta de serviço do Kubernetesnpm cache clean --force && rm -rf node_modules && npm installlaunchctl unload ~/Library/LaunchAgents/com.user.gh-token-monitor.plist2026-05-11T19:20Znpm access ls-packagesfind, grep, shasum)mdfind (Spotlight do macOS, usado para busca mais rápida de arquivos)npm, pip (para verificações de pacotes/tokens)git (para verificações de repositórios)lsof (para verificações de conexões de rede)MIT
| Etapa | Descrição |
|---|
| Persistência | LaunchAgent do macOS (arquivo + estado carregado no launchctl), serviço systemd do Linux, script dead-man's switch, drops de payload em .claude/ e .vscode/, workflows do GitHub Actions injetados, droppers em /tmp |
| Arquivos maliciosos | router_init.js, tanstack_runner.js, router_runtime.js, gh-token-monitor.sh, transformers.pyz — verificados contra 3 hashes SHA-256 conhecidos |
| Indicadores C2 | Escaneia arquivos de configuração (.npmrc, .bashrc, .zshrc, .env) e código-fonte do projeto em busca de 6 domínios C2 + marcadores de campanha |
| Pacotes npm | Todas as árvores node_modules, raiz global do npm, arquivos de bloqueio (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lock), cache npm — com correspondência precisa por pacote (42 pacotes específicos @tanstack router, não todo o escopo) |
| Pacotes PyPI | pip show em todos os ambientes Python/conda + requirements.txt, pyproject.toml, Pipfile, poetry.lock |
| Repositórios Git | Hash de commit malicioso no histórico, branches dead-drop dependabout/*/setup-formatter, autor de commit dead-drop, codeql_analysis.yml injetado |
| Histórico do shell & env | Histórico do Bash/Zsh/Fish para rastros de execução de payload, arquivos RC do shell para injeções, variáveis de ambiente para domínios C2 |
| Rede & tokens | Conexões ativas com C2 via lsof, /etc/hosts, ~/.ssh/known_hosts, lista de tokens npm |
git-branch-selectorgit-git-gitml-toolkit-tsnextmove-mcpsafe-actionts-dnawot-api| Indicador | Valor |
|---|
| Exfiltração primária | filev2.getsession.org |
| Sementes de sessão | seed{1,2,3}.getsession.org |
| C2 secundário | api.masscan.cloud, git-tanstack.com |
| Preparação de payload | litter.catbox.moe/h8nc9u.js, litter.catbox.moe/7rrc6l.mjs |
| Commit malicioso | 79ac49eedf774dd4b0cfa308722bc463cfe5885c |