O Brasil está entre os três países mais visados por uma nova e devastadora campanha de malware que já infectou mais de 800 pacotes do npm, o maior repositório de bibliotecas JavaScript do mundo.
Batizado de Shai-Hulud 2.0, o ataque coloca desenvolvedores e organizações brasileiras na mira de um dos mais sofisticados worms digitais já documentados: segundo dados da Kaspersky, 9,7% dos mais de 1.700 ataques bloqueados desde setembro atingiram usuários no país, ficando atrás apenas da Rússia (18,5%) e Índia (10,7%).
Nossos vídeos em destaque
Origem do Shai-Hulud
O nome Shai-Hulud é uma referência ao verme gigante de “Dune”. Este malware, do tipo worm, se move pelo ecossistema de desenvolvimento como uma criatura subterrânea, consumindo credenciais, infectando novos hospedeiros e se multiplicando em uma escala alarmante. Ele modifica pacotes do Node Package Manager (npm), que funciona como um repositório de bibliotecas para desenvolvedores.
Quando um desenvolvedor instala um pacote infectado, o primeiro arquivo executado é o setup_bun.js, um script que parece completamente inofensivo. Diferente da maioria dos malwares que tentam esconder seu código, este script é deixado propositalmente sem ofuscação, bem documentado e com uma aparência profissional. Assim, ele consegue roubar informações de login e senha sem suspeitas.
Com essas credenciais em mãos, o malware então infecta todos os outros pacotes que o desenvolvedor mantém, republicando novas versões com o código malicioso embutido. Esses pacotes infectados são então baixados por outros desenvolvedores, e o ciclo se repete.
O ataque tem múltiplos objetivos: roubar credenciais e segredos (como chaves de acesso a serviços de nuvem da AWS, Azure e Google Cloud), expor repositórios privados de empresas tornando-os públicos, e coletar dados sensíveis de todo o sistema da vítima.
"Ele se apresenta como uma ferramenta para instalar o Bun JavaScript runtime, uma tecnologia legítima e popular entre desenvolvedores", explica o relatório da Kaspersky. O script verifica se o Bun já está instalado no sistema e, caso não esteja, o baixa de fontes oficiais de maneira específica para cada sistema operacional. Tudo parece rotineiro, seguro, confiável.
Mas essa normalidade é uma armadilha. Uma vez que o Bun está instalado, o verdadeiro ataque começa.
O segundo estágio: 10 MB de código malicioso
Com o runtime Bun no lugar, o malware executa seu segundo estágio: o arquivo bun_environment.js, um script de 10 megabytes fortemente ofuscado usando ferramentas como obfuscate.io. É aqui que toda a operação maliciosa se desenrola.
O primeiro alvo são as credenciais. O malware vasculha o sistema em busca de tokens de acesso do GitHub (identificados pelos prefixos ghp_ ou gho_) em variáveis de ambiente e arquivos de configuração da CLI do GitHub.
Mas não para por aí, ele também procura credenciais de serviços de nuvem como AWS, Azure e Google Cloud, consultando serviços de metadados e usando SDKs oficiais para enumerar todas as chaves de acesso disponíveis.
Para garantir que nenhum segredo escape, o malware baixa e executa o TruffleHog, uma ferramenta legítima usada por profissionais de segurança para encontrar credenciais vazadas. Com ela, o Shai-Hulud 2.0 escaneia agressivamente todo o sistema de arquivos da vítima.
GitHub como canal de comunicação e arma
Uma das inovações mais engenhosas do Shai-Hulud 2.0 é como ele usa o próprio GitHub para exfiltrar dados roubados. Em vez de enviar informações para servidores controlados por criminosos — o que poderia ser detectado por firewalls e sistemas de segurança — o malware cria um repositório público no GitHub com um nome aleatório de 18 caracteres.
Este repositório recebe um marcador específico em sua descrição: "Sha1-Hulud: The Second Coming." É para lá que todos os dados roubados são enviados — credenciais, informações do sistema, tokens de acesso. A vítima, sem saber, está usando sua própria conta do GitHub para armazenar o produto de seu próprio roubo.
Mas há um recurso ainda mais sinistro: se o malware não consegue encontrar um token do GitHub na máquina da vítima, ele procura por repositórios de outras vítimas usando aquele marcador específico na descrição.
Ao encontrá-los, o Shai-Hulud rouba os tokens já exfiltrados de outras vítimas, criando uma rede interconectada de credenciais compartilhadas. É como se cada vítima se tornasse um fornecedor involuntário de recursos para futuros ataques.
A injeção de workflows maliciosos
Para roubar segredos ainda mais protegidos — aqueles armazenados no GitHub Actions, o sistema de automação do GitHub —, o malware cria branches chamados shai-hulud em todos os repositórios que a vítima pode acessar. Nesses branches, ele injeta arquivos de workflow maliciosos (shai-hulud-workflow.yml) que são acionados a cada push no repositório.
Esses workflows, que parecem arquivos de configuração normais, coletam automaticamente todos os segredos do GitHub Actions e os enviam para o servidor dos atacantes, com os dados codificados duas vezes em Base64 para dificultar a detecção. É um método de exfiltração contínua e automatizada que funciona silenciosamente em segundo plano.
O worm se replica: até 100 pacotes por vítima
Após roubar as credenciais, o Shai-Hulud 2.0 parte para sua próxima missão: se reproduzir. O malware busca o token de autorização do npm nos arquivos de configuração .npmrc do sistema e, ao encontrá-lo, valida o token consultando a API do npm.
Com acesso confirmado, o script recupera uma lista de até 100 pacotes mantidos pela vítima — um aumento significativo em relação aos 20 pacotes da primeira versão. Para cada pacote, o malware executa uma operação cirúrgica:
- Baixa a versão tarball (arquivo .TAR) do pacote;
- Cria um diretório temporário;
- Desempacota o arquivo;
- Injeta os arquivos maliciosos setup_bun.js e bun_environment.js;
- Modifica o package.json para executar o script malicioso durante a pré-instalação;
- Incrementa o número da versão do pacote;
- Reempacota tudo e publica a nova versão infectada no npm.
O ciclo se fecha: outros desenvolvedores baixam essas novas versões aparentemente legítimas, instalam em seus projetos, e o processo recomeça. É uma infecção em cadeia que se multiplica exponencialmente.
Shai Hulud 2.0 tem até modo destrutivo
Talvez o aspecto mais preocupante do Shai-Hulud 2.0 seja seu comportamento quando não consegue cumprir seus objetivos. Se o malware não encontra tokens válidos do npm nem do GitHub, tornando impossível exfiltrar dados ou se propagar, ele não simplesmente desiste.
Em vez disso, ativa uma carga destrutiva que apaga arquivos do usuário, principalmente aqueles no diretório home. É uma vingança digital, uma punição por não ter o que roubar.
Vítimas em escala global
A telemetria da Kaspersky mostra que o Shai-Hulud 2.0 não discrimina: suas vítimas incluem desenvolvedores individuais e grandes organizações em todos os continentes. As infecções estão concentradas na Rússia (18,5% dos casos), Índia (10,7%) e Brasil (9,7%), mas também foram registradas ocorrências significativas no Vietnã, China, Turquia e França.
Os mais de 800 pacotes infectados representam milhões de downloads potenciais, só com a versão 2.0. Cada instalação é uma nova oportunidade para o malware roubar credenciais, expor repositórios privados e infectar mais pacotes, criando um efeito cascata que pode comprometer cadeias inteiras de desenvolvimento de software.
Sinais de infecção
Identificar uma infecção por Shai-Hulud 2.0 exige atenção a detalhes específicos. Os pacotes infectados apresentam algumas características reveladoras:
- Contêm um arquivo chamado package.tar (em vez de um arquivo que corresponde ao nome do pacote);
- Têm comandos preinstall ou postinstall suspeitos no package.json que executam scripts como setup_bun.js;
- Versões incrementadas de forma incomum ou rápida;
- Presença dos arquivos setup_bun.js e bun_environment.js.
No GitHub, os sinais incluem repositórios com nomes aleatórios de 18 caracteres, descrições contendo “Sha1-Hulud: The Second Coming”, branches chamados shai-hulud em repositórios legítimos, e arquivos de workflow shai-hulud-workflow.yml no diretório .github/workflows.
Como se proteger
A Kaspersky recomenda uma série de medidas para quem suspeita de infecção ou deseja se proteger preventivamente:
- Auditoria imediata: faça uma varredura completa do sistema com uma solução de segurança confiável;
- Verifique todos os repositórios GitHub em busca de nomes suspeitos, branches shai-hulud e workflows maliciosos;
- Revise os logs do GitHub Actions procurando por referências a "shai-hulud"
- Rotação de credenciais: reemita todos os tokens do npm e GitHub, rotacione chaves de acesso a serviços de nuvem, especialmente AWS e Google Cloud e troque todas as senhas e segredos que possam ter sido expostos;
- Limpeza do ambiente: limpe o cache do npm, faça um inventário de todos os módulos npm instalados, reverta para versões limpas de pacotes suspeitos e procure por indicadores de comprometimento no sistema de arquivos e na rede.
Para continuar informado sobre este caso, acompanhe o TecMundo nas redes sociais. Inscreva-se em nossa newsletter e canal do YouTube para mais notícias de segurança e tecnologia.
)
)
)
)
)
)
)