Shai-Hulud 2.0: malware avança sobre o npm e coloca o Brasil entre os principais alvos

O Brasil entrou no radar de uma das campanhas de malware mais agressivas já vistas no ecossistema de desenvolvimento JavaScript. Batizado de Shai-Hulud 2.0, o ataque já contaminou mais de 800 pacotes do npm, o maior repositório de bibliotecas JavaScript do mundo, e se comporta como um worm altamente sofisticado, capaz de se espalhar sozinho entre projetos e desenvolvedores.

Segundo a Kaspersky, 9,7% dos mais de 1.700 ataques bloqueados desde setembro atingiram usuários brasileiros. O país fica atrás apenas da Rússia, com 18,5%, e da Índia, com 10,7%, o que coloca o Brasil entre os três principais alvos globais da campanha.

Um worm inspirado em Dune

O nome Shai-Hulud vem do universo de Dune e não é por acaso. Assim como o verme gigante da ficção científica, esse malware se move silenciosamente pelo “subsolo” do desenvolvimento de software, consumindo credenciais, se replicando e contaminando tudo pelo caminho.

O ataque foca diretamente o npm. Quando um desenvolvedor instala um pacote comprometido, o primeiro código executado é o arquivo setup_bun.js. À primeira vista, ele parece legítimo: não é ofuscado, é bem documentado e tem aparência profissional. Essa escolha não é descuido, é estratégia. O script rouba credenciais sem levantar suspeitas.

A partir daí, o malware ganha tração. Com logins e tokens em mãos, ele infecta todos os pacotes mantidos pela vítima, publica novas versões com código malicioso embutido e reinicia o ciclo. Cada desenvolvedor infectado vira, sem saber, um novo ponto de distribuição.

Disfarce perfeito: Bun como isca

Para reduzir ainda mais a desconfiança, o Shai-Hulud 2.0 se apresenta como uma ferramenta de instalação do Bun, um runtime JavaScript legítimo e em crescimento. O script verifica se o Bun já existe no sistema e, caso não exista, faz o download a partir de fontes oficiais, de acordo com o sistema operacional.

Tudo parece normal. Justamente aí está o problema.

Depois que o Bun é instalado, o malware passa para o segundo estágio.

O segundo estágio: 10 MB de código malicioso

O verdadeiro ataque acontece com a execução do arquivo bun_environment.js, um script de cerca de 10 MB fortemente ofuscado. É nesse ponto que o Shai-Hulud 2.0 mostra seu real poder.

O malware varre o sistema em busca de tokens do GitHub, identificando padrões como ghp_ e gho_, tanto em variáveis de ambiente quanto em arquivos de configuração da CLI. Em seguida, parte para credenciais de nuvem, incluindo AWS, Azure e Google Cloud, usando APIs e serviços de metadados para listar chaves de acesso válidas.

Para não deixar nada para trás, o worm ainda baixa e executa o TruffleHog, uma ferramenta legítima usada por profissionais de segurança para localizar segredos vazados. Com isso, todo o sistema de arquivos da vítima é escaneado de forma agressiva.

GitHub como canal de ataque

Uma das partes mais engenhosas do Shai-Hulud 2.0 é o uso do próprio GitHub como infraestrutura de exfiltração. Em vez de enviar dados para servidores externos, o malware cria um repositório público na conta da vítima, com um nome aleatório de 18 caracteres.

Esse repositório recebe uma descrição específica: “Sha1-Hulud: The Second Coming”. É ali que os dados roubados são armazenados: tokens, segredos, informações do sistema. Na prática, a vítima vira o repositório do próprio roubo.

Se o malware não encontra um token do GitHub na máquina, a situação piora. Ele procura repositórios de outras vítimas usando o mesmo marcador na descrição e passa a roubar os tokens já coletados. Assim, cada vítima fortalece a próxima, criando uma rede distribuída de credenciais comprometidas.

Injeção de workflows maliciosos

Para ir ainda mais longe, o Shai-Hulud 2.0 tenta acessar segredos protegidos pelo GitHub Actions. Para isso, cria branches chamados shai-hulud em todos os repositórios aos quais a vítima tem acesso.

Nesses branches, o malware injeta arquivos de workflow maliciosos que são executados automaticamente a cada push. Esses arquivos coletam segredos do GitHub Actions e enviam tudo para os atacantes, com os dados codificados duas vezes em Base64. É um mecanismo de exfiltração contínuo, automatizado e difícil de perceber.

Replicação em escala: até 100 pacotes por vítima

Depois de roubar credenciais, o worm se replica. Usando o token do npm encontrado no arquivo .npmrc, ele consulta a API da plataforma e lista até 100 pacotes mantidos pela vítima, um salto grande em relação à versão anterior, que infectava apenas 20.

Para cada pacote, o processo é quase cirúrgico: o malware baixa o pacote, injeta seus arquivos, altera o package.json para garantir execução durante a instalação, incrementa a versão e republica tudo no npm. Quem baixa a nova versão “limpa” acaba puxando o malware junto.

Quando não há nada para roubar, ele destrói

Um detalhe especialmente preocupante é o comportamento destrutivo do Shai-Hulud 2.0. Se o malware não encontra tokens do npm nem do GitHub, ele ativa uma carga que apaga arquivos do usuário, principalmente no diretório home. Não é erro, é punição.

Um problema global, com impacto real

A campanha atinge desenvolvedores individuais e grandes empresas no mundo todo. Além de Rússia, Índia e Brasil, há registros relevantes no Vietnã, China, Turquia e França. Com mais de 800 pacotes infectados, o potencial de impacto é enorme e pode comprometer cadeias inteiras de desenvolvimento.

Sinais claros de comprometimento

Pacotes infectados costumam apresentar padrões como arquivos chamados package.tar, scripts preinstall ou postinstall suspeitos no package.json, versões que aumentam rápido demais e presença dos arquivos setup_bun.js e bun_environment.js.

No GitHub, os sinais incluem repositórios com nomes aleatórios, descrições com a frase “Sha1-Hulud: The Second Coming”, branches shai-hulud e workflows maliciosos dentro de .github/workflows.

Como reduzir os riscos

A recomendação é agir rápido. Faça uma varredura completa do sistema com uma solução de segurança confiável, revise todos os repositórios no GitHub e verifique logs do GitHub Actions. Rotacione imediatamente tokens do npm e GitHub, além de chaves de serviços em nuvem. Limpe caches, revise dependências instaladas e substitua pacotes suspeitos por versões confiáveis.

O Shai-Hulud 2.0 deixa uma mensagem clara para o ecossistema de desenvolvimento: ataques à cadeia de suprimentos estão mais sofisticados, silenciosos e perigosos. Confiar cegamente em dependências nunca foi tão arriscado.