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 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.
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.
🔗 Conexão com Ataques Anteriores
Este ataque está diretamente ligado ao comprometimento s1ngularity/Nx de agosto de 2025, no qual o roubo inicial de tokens do GitHub possibilitou o ataque mais amplo à cadeia de suprimentos. Muitas vítimas iniciais do Shai-Hulud eram vítimas conhecidas do ataque s1ngularity. Pesquisadores de segurança também observam a integração de conteúdo gerado por IA na campanha, com confiança moderada de que um LLM foi usado para gerar o script bash malicioso.
📅 Linha do Tempo do Ataque
Campanha Shai-Hulud original:
26 de agosto de 2025: ocorre o comprometimento s1ngularity/Nx (ataque precursor)
14 de setembro de 2025, 17:58 UTC: primeiro pacote malicioso rxnt-authentication é publicado ("Paciente Zero")
15 de setembro de 2025: ataque detectado e relatado por pesquisadores de segurança
15 a 16 de setembro de 2025: o worm se espalha rapidamente pelo ecossistema npm
16 de setembro de 2025: mais de 180 pacotes confirmados como comprometidos
17 de setembro de 2025: esforços contínuos de monitoramento e limpeza
18 de setembro de 2025: lançamento da v1.2.0 com 200 pacotes rastreados e ferramentas de prevenção aprimoradas
Campanha Shai-Hulud 2.0:
21 a 23 de novembro de 2025: pacotes maliciosos enviados ao registro npm
24 de novembro de 2025: ataque detectado e relatado pela Wiz Research e Aikido
24 de novembro de 2025: lançamento da v2.0.0 com mais de 738 pacotes rastreados e recursos de detecção do Shai-Hulud 2.0
Em andamento: o GitHub continua removendo repositórios criados pelo atacante; o atacante continua criando novos repositórios
Os scanners Python e JavaScript usarão automaticamente os dados atualizados
Essa abordagem centralizada elimina a necessidade de atualizar vários arquivos quando novas ameaças são descobertas.
Opções de Implantação
Para Equipes de Segurança
root@kitploit:~
# Create central scanning script
curl -O https://your-domain.com/shai_hulud_scanner.py
chmod +x shai_hulud_scanner.py
# Mass scan multiple projects
for dir in /projects/*/; do
echo "Scanning $dir"
python3 shai_hulud_scanner.py "$dir"
done
Integração CI/CD
root@kitploit:~
# GitHub Actions example
- name: Scan for Shai-Hulud packages
run: |
curl -O https://your-domain.com/shai_hulud_scanner.js
npm install js-yaml
node shai_hulud_scanner.js .
if [ $? -ne 0 ]; then
echo "SECURITY ALERT: Compromised packages detected!"
exit 1
fi
Implantação Empresarial
root@kitploit:~
# Add to security toolkit
cp shai_hulud_scanner.py /usr/local/bin/
cp shai_hulud_scanner.js /usr/local/bin/
cp affected_packages.yaml /usr/local/bin/
# Create alias for easy access
echo 'alias scan-shai="python3 /usr/local/bin/shai_hulud_scanner.py"' >> ~/.bashrc
Notas Técnicas
Plataformas-Alvo: Linux, macOS e Windows (o Shai-Hulud 2.0 adiciona suporte a Windows)
Tamanho do Payload: pacote JavaScript minificado de mais de 3 MB (original); novos payloads no Shai-Hulud 2.0
Autopropagação: primeiro worm autorreplicante bem-sucedido no ecossistema npm
Fases de Execução: o original usa postinstall; o Shai-Hulud 2.0 usa preinstall (aumenta a exposição em ambientes de build)
Seguro: operações somente leitura, sem modificações em seus arquivos
Rápido: otimizado para varredura rápida de grandes bases de código
Preciso: baseado nas listas oficiais de IoCs de pesquisadores de segurança (Wiz Research, Aikido)
Componentes Gerados por IA: pesquisadores de segurança avaliam, com confiança moderada, que um LLM foi usado para gerar partes do script bash malicioso
Mecanismos de Persistência:
Original: workflows do GitHub Actions, branches maliciosas e migrações de repositórios
Shai-Hulud 2.0: runners self-hosted, workflows baseados em discussões, workflows de formatação
Integração com Nuvem:
Original: visa ambientes AWS e GCP usando bibliotecas SDK e endpoints IMDS
Shai-Hulud 2.0: segmentação em múltiplas nuvens (AWS, Azure, GCP) com SDKs oficiais, despejo de segredos de secret managers
Indicadores de Comprometimento (IoCs)
Shai-Hulud original (setembro de 2025):
Gancho postinstall malicioso: "postinstall": "node bundle.js" no package.json
Arquivo de payload: bundle.js (geralmente JavaScript minificado de mais de 3 MB)
Endpoint de exfiltração: referências a domínios webhook.site
Workflow do GitHub: .github/workflows/shai-hulud-workflow.yml para persistência
Nomeação de repositórios: repositórios com sufixos "Shai-Hulud" ou "-migration"
Indicadores de branch: branches chamadas shai-hulud contendo commits maliciosos
Shai-Hulud 2.0 (novembro de 2025):
Gancho preinstall malicioso: "preinstall": "node setup_bun.js" ou "preinstall": "node bun_environment.js" no package.json
Novos arquivos de payload: setup_bun.js, bun_environment.js (além de bundle.js)
Arquivos de dados: cloud.json, contents.json, environment.json, truffleSecrets.json
Workflows do GitHub:
.github/workflows/discussion.yaml (com runs-on: self-hosted e RUNNER_TRACKING_ID: 0)
.github/workflows/formatter_*.yml (correspondência de padrões, usado para exfiltração de segredos)
Runner self-hosted: runner chamado 'SHA1HULUD' registrado em máquinas infectadas
Escalonamento de privilégio em Docker: comandos como docker run --rm --privileged -v /:/host
Descrições de repositórios: repositórios com "Shai-Hulud" na descrição
Segmentação em múltiplas nuvens: tentativas de acesso ao AWS Secrets Manager, Google Secret Manager e Azure Key Vault
Endpoint de exfiltração: referências a domínios webhook.site (mesmo do original)
Comum a ambas as variantes:
Endpoint de exfiltração: referências a domínios webhook.site
Nomeação de repositórios: repositórios com "Shai-Hulud" no nome ou na descrição