
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, , ou . Esses são os namespaces confirmados como envenenados. 149 pacotes no total, mais de 400 versões maliciosas rastreadas até agora.
lightningtelnyxMini 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 |
| Onda | Data | Pacotes | Publicador |
|---|---|---|---|
| TanStack | Maio 2026 | 43 pacotes @tanstack/* | voicproducoes |
| UiPath / JFrog | Maio 2026 | 66 pacotes @uipath/* | voicproducoes / zblgg |
| SAP @cap-js | Abril 2026 | @cap-js/db-service, @cap-js/sqlite, @cap-js/postgres, mbt | cloudmtabot |
| PyPI | Fev--Abril 2026 | litellm, telnyx, lightning, mistralai, guardrails-ai | vários |
Importante: npm audit signatures aprovado não significa que você está seguro. Mini Shai-Hulud é o primeiro ataque documentado a gerar proveniência SLSA Build Level 3 válida através de um sequestro de pipeline OIDC do GitHub Actions. As assinaturas verificam a proveniência da construção, não que o pipeline de construção em si estava limpo.
O worm usa ofuscação em três camadas: obfuscator.io, depois uma cifra de substituição Fisher-Yates (PBKDF2-SHA256, 200.000 iterações), depois AES-256-GCM. Ele exfiltra credenciais através do Session Protocol CDN, dead-drops do GraphQL do GitHub, um canister da blockchain ICP e esteganografia WAV.
A persistência é instalada como um LaunchAgent do macOS, unidade systemd do Linux, Scheduled Task do Windows ou chave HKCU Run, hook SessionStart do Claude Code, tarefa folderOpen do VS Code e um ficheiro de inicialização Python .pth. Em runners CI comprometidos, ele instala um DaemonSet do Kubernetes.
O RANSOM TOKEN (IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) é emparelhado com um daemon gh-token-monitor que consulta api.github.com/user a cada 60 segundos. Uma resposta 40x aciona rm -rf ~/ em Linux/macOS ou o equivalente no Windows.
Agregadas de GHSA-g7cv-rxg3-hmpx, JFrog Security Research, StepSecurity, Socket.dev, Wiz Threat Research, Snyk, Aikido Security, Orca Security, Mend.io (a partir de 2026-05-13).
Regras de deteção: Sigma 5299fadf-f228-4526-8274-251db1960be9 (Execução Maliciosa de Bun do Shai-Hulud), assinatura ATP do Palo Alto 87120.
A Intrudify é especialista em resposta a incidentes na cadeia de npm/PyPI, sequestros de pipeline CI/CD e abuso de token OIDC do GitHub Actions.
Contacto: [email protected] · intrudify.com
| 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 |