Pesquisadores da JFrog descobriram nesta semana o IronWorm, um malware escrito em Rust que se auto-replica através de pacotes npm maliciosos. O worm infectou ao menos 36 pacotes e comprometeu nove organizações no ecossistema Web3, roubando credenciais de desenvolvedores e carteiras de criptomoedas por meio de um rootkit eBPF e comunicação via Tor.

Vetor de infecção inicial

O ataque teve origem na conta npm asteroiddao, vinculada à organização asteroid-dao no GitHub, dentro do ecossistema Arweave/WeaveDB. Pacotes legítimos foram republicados em versões trojanizadas numa janela estreita de tempo, cada um carregando um binário Linux ELF oculto em diretórios como tools/setup. A tática lembra a do worm npm que usava binding.gyp para roubo em massa, mas o IronWorm vai além com capacidade de auto-replicação.

O binário é executado automaticamente por um hook preinstall no package.json. Ao rodar npm install, o malware roda antes mesmo de o gerenciador resolver dependências — sem nenhuma ação adicional do desenvolvedor. As versões maliciosas foram descontinuadas em menos de 24 horas, e os commits suspeitos removidos dos repositórios de forma silenciosa.

Mecanismo de auto-replicação

Depois de infectar uma máquina, o IronWorm rouba credenciais do GitHub e injeta commits maliciosos em todos os repositórios acessíveis — uma evolução em relação a campanhas anteriores como o ataque Miasma que comprometeu pacotes oficiais da Red Hat. Esses commits introduzem ganchos de execução em build systems — via preinstall (npm), setup.py (PyPI) ou build-script (Cargo). Também substituem workflows do GitHub Actions por pipelines que roubam secrets usando ${{ toJSON(secrets) }}.

Os commits são forjados com data retroativa, copiando o timestamp do commit legítimo mais recente. Alguns aparecem como tendo mais de 13 anos. O nome do autor é falsificado como “claude”, imitando o assistente de IA da Anthropic, para reduzir suspeitas durante revisões de código.

A JFrog identificou 57 commits maliciosos em nove organizações no GitHub, incluindo weavedb, asteroid-dao, ArweaveOasis e warashibe. Uma conta comprometida registrou cerca de 4.500 contribuições a projetos privados no mês do ataque, indicando que o escopo visível pode ser uma fração do total.

Rootkit eBPF e evasão

O IronWorm emprega um rootkit baseado em eBPF compilado com clang 22.1.5 para ocultar processos e conexões de rede em nível de kernel. Em sistemas com kernel lockdown ativado, a eficácia do rootkit é reduzida. Todas as strings do binário são criptografadas com chaves individuais por ponto de chamada, exigindo análise manual de cada uma.

Os pesquisadores recuperaram referências a 86 variáveis de ambiente para credenciais de cloud e serviços de IA, endpoints da API do GitHub, identidades de bots e templates de injeção de código. A comunicação com o servidor de comando e controle acontece via rede Tor, com comandos para exfiltração de dados, entrega de payloads e shell remoto.

Em ambientes de CI, o malware solicita tokens OIDC para obter credenciais temporárias de publicação no npm — criando pacotes trojans sem manipular tokens diretamente. O binário também é empacotado com uma versão modificada do UPX que impede descompactação com ferramentas padrão.

Etapa do ataque Ação do malware Impacto
Infecção inicial Binário ELF via hook preinstall do npm Execução automática sem interação do usuário
Roubo de credenciais Varredura de 86 variáveis de ambiente Chaves cloud, IA e carteiras cripto comprometidas
Propagação Commits maliciosos em repositórios GitHub Injeção de payloads em novos projetos
Persistência Rootkit eBPF oculta processos e conexões Detectável apenas com kernel lockdown
Exfiltração C2 via Tor ou GitHub Actions artifacts Dados extraídos sem conexão direta ao atacante

Medidas de proteção

  • Audite dependências npm: verifique se pacotes do ecossistema Arweave/WeaveDB estão em versões suspeitas. Compare checksums com registros oficiais.
  • Revogue credenciais expostas: se instalou pacotes desse ecossistema recentemente, gire tokens do GitHub, chaves cloud e frases de recuperação de carteiras cripto.
  • Ative kernel lockdown: em distribuições Linux compatíveis, habilite o modo lockdown para limitar rootkits eBPF.
  • Monitore commits em repositórios: implemente proteção de branch e revisão obrigatória, especialmente em arquivos como package.json, setup.py e workflows do GitHub Actions.
  • Integre scanners ao pipeline: ferramentas como o JFrog Xray detectam binários suspeitos em dependências antes da instalação em produção.

O IronWorm marca uma evolução nos ataques de cadeia de suprimentos de software: auto-replicante, multiplataforma e silencioso em ecossistemas de alto valor como Web3 e criptomoedas.

Fontes