OreNPMGuard - Scanner de Pacotes Shai-Hulud
Versão 2.0.0 - Sistema de Detecção e Prevenção Aprimorada Shai-Hulud 2.0
Uma ferramenta de segurança para detectar pacotes npm comprometidos nos ataques à cadeia de suprimentos Shai-Hulud (original de setembro de 2025 e Shai-Hulud 2.0 de novembro de 2025). Examina os arquivos package.json e package-lock.json para detectar versões exatas instaladas e Indicadores de Comprometimento (IoCs). Disponível em implementações Python e Node.js com configuração YAML centralizada para fácil manutenção.
Atualização mais recente: 24 de novembro de 2025 - mais de 738 pacotes comprometidos rastreados com 1.291 combinações exclusivas de pacote@versão. Agora detecta tanto as variantes originais do Shai-Hulud quanto as do Shai-Hulud 2.0.
Para varredura em múltiplos ecossistemas, consulte ore-mal-pkg-inspector.
🔗 Projetos Relacionados
Para varredura de pacotes maliciosos em múltiplos ecossistemas (npm, PyPI, Maven, RubyGems, Go, Cargo), consulte:
ore-mal-pkg-inspector - Scanner abrangente de pacotes maliciosos com inteligência dinâmica de ameaças.
O OreNPMGuard concentra-se especificamente na defesa contra ataques Shai-Hulud para pacotes npm.
🚨 Sobre os Ataques Shai-Hulud
Shai-Hulud é um worm autorreplicante que começou a comprometer pacotes npm em 14 e 15 de setembro de 2025, representando o primeiro ataque autorreplicante bem-sucedido no ecossistema npm e um dos ataques à cadeia de suprimentos JavaScript mais graves já observados. Nomeado em homenagem aos vermes de areia gigantes da série Dune, de Frank Herbert, esse malware evoluiu para múltiplas variantes.
Shai-Hulud original (setembro de 2025)
O ataque original infectou mais de 200 pacotes npm (conforme rastreado nesta ferramenta), com múltiplas versões afetadas por pacote.
Shai-Hulud 2.0 (novembro de 2025) - NOVO
Uma nova variante surgiu em novembro de 2025 com mudanças significativas:
- Mais de 738 pacotes comprometidos com 1.291 combinações exclusivas de pacote@versão
- Mais de 25.000 repositórios afetados em cerca de 350 usuários exclusivos
- Nova fase de execução: usa scripts
preinstall (não apenas postinstall)
- Novos arquivos de payload:
setup_bun.js e bun_environment.js (além de bundle.js)
- Persistência aprimorada: cria runners self-hosted chamados 'SHA1HULUD' e novos padrões de workflow do GitHub
- Segmentação em múltiplas nuvens: coleta de credenciais AWS, Azure e GCP
- Escalonamento de privilégio em Docker: tenta obter acesso root via contêineres privilegiados
- Pacotes enviados entre 21 e 23 de novembro de 2025
Referência: Post do blog Wiz Research - Shai-Hulud 2.0
🦠 Como o Ataque Funciona
Paciente Zero: o ataque começou com o pacote rxnt-authentication publicado em 14 de setembro de 2025, às 17:58:50 UTC, pela conta npm "techsupportrxnt" comprometida.
Cadeia de Ataque (Shai-Hulud original):
- Instalação: o pacote malicioso executa o script
postinstall que roda bundle.js (payload JavaScript de mais de 3 MB)
- Coleta de Credenciais: usa TruffleHog para procurar tokens do GitHub/npm, credenciais AWS/GCP/Azure, variáveis de ambiente e chaves de nuvem expostas por IMDS
- Exfiltração de Dados: cria o repositório público "Shai-Hulud" na conta GitHub da vítima com segredos roubados em
data.json (duplamente codificado em base64)
- Persistência: injeta workflow malicioso do GitHub Actions (
.github/workflows/shai-hulud-workflow.yml) que exfiltra segredos do repositório para webhook[.]site
- Migração de Repositórios: força repositórios privados de organizações a se tornarem repositórios pessoais públicos com o sufixo "-migration" e a descrição "Shai-Hulud Migration"
- Propagação do Worm: usa tokens npm roubados para injetar malware em outros pacotes mantidos pela vítima, incrementando números de versão e adicionando ganchos
postinstall
Cadeia de Ataque (Shai-Hulud 2.0 - novembro de 2025):
- Instalação: o pacote malicioso executa o script
preinstall que roda setup_bun.js ou bun_environment.js (novos arquivos de payload)
- Criação de Arquivos de Dados: cria os arquivos
cloud.json, contents.json, environment.json e truffleSecrets.json
- Coleta de Credenciais: segmentação em múltiplas nuvens (AWS, Azure, GCP) usando SDKs oficiais, extraindo credenciais de arquivos de configuração, variáveis de ambiente e IMDS
- Registro de Runner Self-Hosted: registra a máquina infectada como runner self-hosted chamado 'SHA1HULUD'
- Injeção de Workflow no GitHub:
- Cria
.github/workflows/discussion.yaml com runner self-hosted para acesso de backdoor
- Cria
.github/workflows/formatter_*.yml para exfiltração de segredos (depois exclui o workflow para ocultar a atividade)
- Escalonamento de Privilégio em Docker: tenta obter acesso root via
docker run --rm --privileged -v /:/host
- Despejo de Segredos na Nuvem: usa sessões autenticadas para despejar segredos do AWS Secrets Manager, Google Secret Manager e Azure Key Vault
- Criação de Repositórios: cria repositórios com "Shai-Hulud" na descrição para exfiltração
🎯 O Que É Roubado
- Credenciais de Desenvolvimento: PATs do GitHub (
ghp_*, gho_*), tokens de autenticação do npm
- Credenciais de Nuvem: chaves e tokens de acesso AWS, GCP, Azure
- Chaves de API: Atlassian, Datadog e outras credenciais de serviços
- Informações do Sistema: variáveis de ambiente, detalhes do host, contas de usuário
- Código-Fonte: repositórios privados tornados públicos ou clonados
📊 Escala do Impacto
Shai-Hulud original (setembro de 2025):
- Mais de 200 pacotes comprometidos neste banco de dados de rastreamento (incluindo pacotes populares como
@ctrl/tinycolor, ngx-bootstrap)
- Várias contas GitHub comprometidas (a contagem exata varia conforme a fonte)
- Repositórios públicos criados com o rótulo "Shai-Hulud Migration"
- Desenvolvedores potencialmente afetados por meio de dependências de pacotes
Shai-Hulud 2.0 (novembro de 2025):
- Mais de 738 pacotes comprometidos com 1.291 combinações exclusivas de pacote@versão
- Mais de 25.000 repositórios afetados criados por cerca de 350 usuários exclusivos
- Mais de 1.000 novos repositórios adicionados a cada 30 minutos nas primeiras horas da campanha
- Afeta pacotes de grandes ecossistemas: Zapier, ENS Domains, PostHog, Postman, AsyncAPI e outros
- Roubo de credenciais em múltiplas nuvens (AWS, Azure, GCP)
- Tentativas de escalonamento de privilégio em Docker
Roubo de credenciais verificado (de cerca de 20.000 repositórios analisados):
- 775 tokens de acesso GitHub comprometidos
- 373 credenciais AWS expostas
- 300 credenciais GCP expostas
- 115 credenciais Azure expostas
⚠️ Aviso de Exfiltração Entre Vítimas
CRÍTICO: a Wiz Research confirmou que está ocorrendo exfiltração entre vítimas. Isso significa:
- Segredos roubados de uma vítima podem ser publicados em repositórios de propriedade de uma vítima diferente e não relacionada
- Se você encontrar dados suspeitos em seus repositórios GitHub, eles podem pertencer a outro usuário comprometido
- Seus dados podem ter sido exfiltrados para repositórios que não pertencem a você
- Isso complica a atribuição e a resposta a incidentes
Implicação para investigação: ao revisar dados exfiltrados em seus repositórios, verifique se os dados realmente pertencem à sua organização ou a outra vítima.