O Diário de Analistas
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:

  1. Extrai tokens OIDC do GitHub Actions diretamente da memória do runner.
  2. Troca credenciais por tokens de publicação npm.
  3. Publica versões infectadas de pacotes legítimos.
  4. 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

  1. Listar pacotes npm e PyPI em CI/CD e produção
   npm list  # ou pip freeze
  1. Verificar se algum está comprometido:
  2. Se encontrar pacote afetado:
    • NÃO revogue credenciais ainda.
    • Procure por persistência (arquivos listados acima).

Próximas 24 Horas

  1. 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
  1. 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”
  2. 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)

  1. Isolar máquinas/runners, reconstruir a partir de imagens limpas.
  2. Desinstalar pacotes maliciosos e verificar dependências transitivas.
  3. 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: , , , , , , , .

Categorias: Alerta, CI/CD, Falhas, Github, GitHub Actions, Linux, npm, OIDC, Packet Manager, pip, PyPI, Supply Chain, Worm Like.