
Scanner para o worm de supply chain Mini Shai-Hulud npm/PyPI (NHS CC-4781 · CVE-2026-45321). Detecta persistência gh-token-monitor, artefatos de payload e commits de atacantes. Python, Bash, PowerShell.
Um scanner offline gratuito para o worm da cadeia de suprimentos npm/PyPI que atualmente está devastando pacotes principais. Construído pela equipe Intrudify. Sem cadastro, sem telemetria, funciona totalmente offline.
NHS CC-4781 · CVE-2026-45321 (CVSS 9.6) · GHSA-g7cv-rxg3-hmpx
Se você executou npm install ou pip install nas últimas semanas, isto é para si.
Especialmente se você mexeu em @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, ou no PyPI litellm, mistralai, guardrails-ai, lightning, ou telnyx. Esses são os namespaces confirmados como envenenados. 149 pacotes no total, mais de 400 versões maliciosas rastreadas até agora.
Mini Shai-Hulud é o worm que está causando o dano. Ele rouba suas credenciais npm e GitHub, instala persistência em macOS, Linux e Windows, e (a parte que a maioria das pessoas perde) deixa para trás um token armadilhado. Revogá-lo da máquina infectada aciona rm -rf ~/. Seu diretório home, desaparece. A ordem da limpeza é importante.
Este scanner verifica todos os 19 indicadores de comprometimento conhecidos em pacotes, lockfiles, mecanismos de persistência, hashes de payload, tráfego C2, histórico do git e ambientes CI. Ele apenas lê. Nunca escreve, exclui ou faz chamadas para fora.
Três scripts, um trabalho: Python, Bash, PowerShell. Escolha o que se encaixa no seu ecossistema.
Intrudify é o primeiro pentest autónomo totalmente automatizado da Europa para aplicações web. A proposta é simples: mesmo resultado que uma equipa de pentest humana de 30 mil dólares, entregue em horas em vez de semanas, com um relatório pronto para auditoria e orientação de remediação passo a passo para NIS2, SOC2 e ISO27001. Se você entrega código e não tem uma equipa de segurança, essa é a lacuna que preenchemos.
Este scanner é uma peça disso. É gratuito porque os worms da cadeia de suprimentos se movem mais rápido que os ciclos de aquisição. Um desenvolvedor a olhar para um feed de CVE às 23h não precisa de uma chamada de vendas. Precisa de uma ferramenta que execute em 30 segundos e diga se ele está em apuros.
Para compromissos ativos (sequestro de pipeline CI/CD, abuso de token OIDC do GitHub Actions, resposta a incidentes na cadeia de npm/PyPI), contacte diretamente: [email protected]
Se você instalou um pacote npm ou PyPI nas últimas semanas, especialmente algo de @tanstack/*, @uipath/*, @mistralai/*, @cap-js/*, ou no PyPI litellm, mistralai, guardrails-ai, lightning, ou telnyx, a sua máquina pode estar comprometida.
O worm Mini Shai-Hulud rouba credenciais, instala persistência em macOS, Linux e Windows, e pode limpar o seu diretório home se você lidar com a limpeza na ordem errada.
Este scanner verifica todos os 19 indicadores conhecidos. Ele apenas lê. Nunca escreve, exclui ou envia nada da sua máquina.
O worm instala um token npm armadilhado. Revogá-lo da máquina infectada aciona rm -rf ~/. A ordem é importante.
Se o scanner encontrar achados CRÍTICOS, faça isto nesta ordem:
| Você está em... | Use isto |
|---|---|
| macOS ou Linux | scan_cc4781.sh (ou scan_cc4781.py se preferir Python) |
| Windows | scan_cc4781.ps1 (ou scan_cc4781.py com Python nativo) |
| CI / Docker | scan_cc4781.py ou scan_cc4781.sh |
# macOS / Linux
chmod +x scan_cc4781.sh
./scan_cc4781.sh --deep
# Windows PowerShell
.\scan_cc4781.ps1 -Deep
# Python (qualquer SO)
python3 scan_cc4781.py --deep
A flag --deep / -Deep percorre recursivamente todas as node_modules no diretório atual. Recomendado se você tem um monorepo ou vários projetos.
Se o PowerShell bloquear o script:
powershell -ExecutionPolicy Bypass -File .\scan_cc4781.ps1 -Deep
RESULT: 0 CRITICAL / 0 HIGH → você está limpo
RESULT: X CRITICAL / Y HIGH → pare e siga os passos acima antes de fazer qualquer outra coisa
CRITICAL = indicador de comprometimento confirmado. Aja imediatamente.
HIGH = suspeito. Investigue. Alguns achados HIGH são falsos positivos esperados (veja abaixo).
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
Os achados HIGH sysmon.py e execution.js são falsos positivos: os nomes dos ficheiros coincidem com os nomes dos payloads do worm, mas os hashes SHA-256 não. CRITICAL só é acionado quando o hash corresponde a um payload confirmado como malicioso.
| Flag | Bash / Python | PowerShell | O que faz |
|---|---|---|---|
| Varredura profunda | --deep | -Deep | Percorre recursivamente todas as node_modules no CWD |
| Diretório alvo | --npm-dir /path | -NpmDir C:\path | Escaneia uma pasta node_modules específica |
| Saída JSON | --json | -Json | Saída legível por máquina para SIEM / SOAR |
Formato de saída JSON: { "host": "...", "findings": [{ "severity": "CRITICAL|HIGH", "category": "...", "detail": "...", "path": "..." }] }
| # | Categoria | O que procura |
|---|---|---|
| 1 | Versões npm | 149 pacotes, mais de 400 versões exatas confirmadas como maliciosas |
| 2 | Lockfiles | package-lock.json, pnpm-lock.yaml, yarn.lock |
| 3 | PyPI | litellm, telnyx, lightning, mistralai, guardrails-ai |
| 4 | Persistência | LaunchAgent do macOS, systemd do Linux, Scheduled Task do Windows + chave HKCU Run |
| 5 | Persistência | Hook SessionStart do Claude Code, tarefa folderOpen do VS Code |
| 6 | Ficheiros de payload | 13 nomes de ficheiros + SHA-256 contra 11 hashes conhecidos como ruins |
| 7 | Hosts C2 | 11 domínios em /etc/hosts, variáveis de ambiente de proxy, WinHTTP |
| 8 | DNS C2 | Resolve todos os 11 domínios C2 |
| 9 | Conexões C2 | TCP ativo para 5 IPs C2 rastreados |
| 10 | package.json | Injeção optionalDependencies github:tanstack/router |
| 11 | package.json | Injeção prepare: bun run tanstack_runner.js |
| 12 | Workflows | .github/workflows/codeql_analysis.yml, format-check.yml |
| 13 | Git log | Commits de exfiltração do atacante ([email protected]) |
| 14 | Ramificações git | Ramificações do worm com tema Dune, typosquat dependabout/ |
| 15 | Tokens npm | Deteção de RANSOM TOKEN |
| 16 | Histórico do shell | Domínios C2, IPs, nomes de ficheiros de payload |
| 17 | Ambiente CI | Vazamento de credenciais do GitHub Actions |
| 18 | Remotes git | Contas do atacante e domínios C2 |
| 19 | Persistência avançada | Disfarce de serviço sysmon/pgmon, ficheiro litellm_init.pth, DaemonSet do Kubernetes, esteganografia WAV |