Vol. 2 | N. 5 | Pp. 126–128 | 2026 | ISSN xxxx-xxxx
Alerta: Campanha Massiva Shai-Hulud “Here We Go Again” Compromete 170 Pacotes npm e 2 PyPI
Github Actions, de novo. Sim, de novo!
Pesquisadores da JFrog Security Research [1] divulgaram uma das campanhas de supply chain mais sofisticadas já documentadas. A campanha Shai-Hulud “Here We Go Again” compromete 170 pacotes npm e 2 PyPI, baixados 200 milhões de vezes por semana, com comportamento autônomo de propagação (worm-like) e mecanismo destrutivo de “dead-man switch“.
O Ataque
Como funciona
O ataque explora falhas de configurações em workflows GitHub Actions que permitem código controlado por fork executar em contexto privilegiado. Uma vez dentro:
- Extrai tokens OIDC do GitHub Actions diretamente da memória do runner.
- Troca credenciais por tokens de publicação npm.
- Publica versões infectadas de pacotes legítimos.
- Continua automaticamente contra pacotes acessíveis.
Porque é Diferente
Package provenance não detecta isto: um pacote pode ter assinatura válida enquanto contém malware, porque o ataque acontece dentro do workflow, antes da publicação.
Destaques Técnicos
Execução Silenciosa em npm
Script preinstall baixa o Bun runtime e executa payload JavaScript ofuscado (2.3 MB) diretamente durante instalação, sem avisos.
Roubo de Credenciais: Escopo Extraordinário
- GitHub tokens, Actions secrets e OIDC
- npm publishing tokens (trusted-publishing)
- AWS (credenciais, EC2 IMDSv2, metadata)
- Kubernetes (service account tokens, secrets entre namespaces)
- HashiCorp Vault, SSH keys, shell history, Docker auth
- Cloud configs (AWS CLI, GCP, Azure, Bitwarden, 1Password)
Comportamento Worm-Like
Após roubar tokens, o malware modifica tarballs, injeta dependências maliciosas, bumpa versão e republica. Cada publicação infectada gera mais oportunidades de roubo em próximas instalações.
Dead-Man Switch: Destruição Coordenada
Instala serviço persistente que monitora tokens GitHub a cada 60 segundos:
~/.config/systemd/user/gh-token-monitor.service (Linux)
~/Library/LaunchAgents/com.user.gh-token-monitor.plist (macOS)
Se token for revogado: rm -rf ~/ (apaga home directory)
Força defensores a remover persistência ANTES de revogar credenciais.
Múltiplos Canais de Exfiltração
- Uploads criptografados para servidores do atacante.
- Repositórios GitHub públicos criados com tokens roubados.
- Commits como
claude@users.noreply.github.com(IOC útil). - Rede Session/Oxen descentralizada.
Indicadores de Comprometimento (IOCs)
Commits Maliciosos
- Autor:
xxxxx@users.noreply.github.com - Branches:
dependabot/github_actions/format/setup-formatter - Repositórios públicos com descrição: “Shai-Hulud: Here We Go Again“
Arquivos Locais (Persistência)
~/.config/systemd/user/gh-token-monitor.service (Linux)
~/.local/bin/gh-token-monitor.sh
~/.config/gh-token-monitor/
~/Library/LaunchAgents/com.user.gh-token-monitor.plist (macOS)
Infraestrutura de Rede
filev2.getsession.org— upload de credenciais.seed[1-3].getsession.org— service node discovery.83.142.209.194— payload PyPI.
Ações Imediatas
Dentro das Próximas Horas
- Listar pacotes npm e PyPI em CI/CD e produção
npm list # ou pip freeze
- Verificar se algum está comprometido:
- Lista de 170 pacotes npm em JFrog
- PyPI:
guardrails-ai,mistralai
- Se encontrar pacote afetado:
- NÃO revogue credenciais ainda.
- Procure por persistência (arquivos listados acima).
Próximas 24 Horas
- Remover persistência:
Linux:
systemctl --user stop gh-token-monitor.service
systemctl --user disable gh-token-monitor.service
rm -rf ~/.config/systemd/user/gh-token-monitor.service
rm -rf ~/.local/bin/gh-token-monitor.sh
rm -rf ~/.config/gh-token-monitor/
macOS:
launchctl bootout "gui/$(id -u)" ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
rm -rf ~/Library/LaunchAgents/com.user.gh-token-monitor.plist
rm -rf ~/.local/bin/gh-token-monitor.sh
- Buscar em GitHub:
- Commits com autor
claude@users.noreply.github.com - Repositórios públicos com nome aleatório contendo “Shai-Hulud: Here We Go Again”
- Commits com autor
- Após remediação da persistência:
- Revogue tokens GitHub.
- Revogue tokens npm.
- Revogue credenciais AWS, Kubernetes, Vault.
- Rotate SSH keys.
Análise Forense (48-72h)
- Isolar máquinas/runners, reconstruir a partir de imagens limpas.
- Desinstalar pacotes maliciosos e verificar dependências transitivas.
- Monitorar IoCs listados acima.
Considerações
Este não é um ataque comum. Provenance signatures e trusted publishing não são suficientes. O malware executa dentro do workflow antes da publicação.
Para organizações brasileiras: se você usa npm ou pip em CI/CD e GitHub Actions (padrão em 2026), você está potencialmente exposto. Todos os segredos em runners podem estar comprometidos.
A propagação é autossustentável: não requer comando e controle contínuo. Uma vez comprometido um repositório importante, a disseminação acontece automaticamente através de instâncias CI/CD subsequentes.
Referências
[1] JFrog Security Research — Shai-Hulud: Here We Go Again
https://research.jfrog.com/post/shai-hulud-here-we-go-again/
[2] GBHackers Security — 170 npm Packages Hijacked
https://gbhackers.com/170-npm-packages-hijacked/
Tags: Alerta, CI/CD, GitHub, Github Actions, IOC, npm, PyPi, Supply Chain.
Categorias: Alerta, CI/CD, Falhas, Github, GitHub Actions, Linux, npm, OIDC, Packet Manager, pip, PyPI, Supply Chain, Worm Like.