Atacantes exploraram uma conta de manutenção associada ao popular pacote Rust arrayref para publicar uma versão maliciosa que executa malware nos dispositivos dos desenvolvedores durante a compilação dos projetos. Durante uma janela de tempo de no máximo 23 minutos, a operação também atingiu os pacotes append-only-vec e internment, em um ataque à cadeia de fornecimento de software.
A StepSecurity informou que as versões afetadas são arrayref 0.3.10, append-only-vec 0.1.9 e internment 0.8.7, e os três pacotes eram gerenciados pela mesma conta. O arrayref é amplamente utilizado: registrou mais de 53 milhões de downloads nos últimos 90 dias e mais de 245 milhões de downloads no total. Ele é usado em projetos e ferramentas relacionados a criptografia, gráficos e interfaces gráficas Rust, além de componentes utilizados nos ecossistemas Ethereum e Solana.
Como o ataque foi executado?
Os atacantes adicionaram uma dependência de um pacote chamado proc-macro1, que usurpa o nome do conhecido pacote proc-macro2. A maior parte do código-fonte original dos pacotes permaneceu inalterada, o que torna a manipulação mais difícil de detectar por quem revisa apenas as diferenças de código.
O proc-macro1 continha um arquivo build.rs que é executado automaticamente durante a compilação. O arquivo recompõe os componentes da estrutura maliciosa a partir de partes codificadas em Base64 e, em seguida, escolhe uma carga útil adequada ao sistema operacional, incluindo Linux, Windows e macOS nas arquiteturas x86-64 e ARM64. No Unix, a carga útil é gravada em /tmp/rust-setup e executada como um processo separado, enquanto no Windows o ataque cria um arquivo chamado rust-setup.ps1 dentro da pasta TEMP e usa wscript.exe e um script no formato VBS para manter o processo em execução.
O que o malware pode roubar?
Segundo uma análise da Wiz, a segunda etapa coleta informações do host e credenciais. O malware extrai dados de login dos bancos de dados SQLite dos navegadores Google Chrome, Brave e Edge. Ele também cria mecanismos de persistência por meio de Registry Run no Windows, LaunchAgent no macOS e systemd no Linux. A carga útil recebe um endereço como argumento, que se acredita ser o endereço de um servidor de comando e controle.
Linha do tempo e o que isso significa para os desenvolvedores
A campanha começou às 01:17 UTC de 20 de agosto de 2026, com a criação de uma conta no GitHub que usurpava a identidade do proeminente desenvolvedor de Rust David Tolnay, seguida por uma conta semelhante no crates.io. Uma versão legítima do proc-macro1 foi publicada às 01:55, seguida pela versão maliciosa 1.0.107 às 07:11. Quatro minutos depois, o arrayref 0.3.10 foi publicado por meio da conta legítima droundy, associada a David Roundy, com a remoção das versões 0.3.5 a 0.3.9, o que poderia levar as ferramentas de instalação a escolher a versão maliciosa.
O incidente foi comunicado às 07:54, e o crates.io excluiu o pacote proc-macro1 às 08:03 e removeu o arrayref 0.3.10 do índice às 08:41. Também foram removidas versões maliciosas de outros pacotes: aovine, arone, aronenao e tinymember.
Medidas de resposta
Quem instalou as versões afetadas durante a janela de exposição, que durou aproximadamente uma hora e meia, deve tratar o ambiente como comprometido. A revisão inclui procurar versões suspeitas nos arquivos Cargo.lock, verificar os arquivos que foram criados e examinar as conexões com o endereço 23.254.165[.]112 pelas portas 9089 e 443. Quando o comprometimento for confirmado, as análises recomendam fazer a rotação de todas as credenciais, tokens de CI, chaves de assinatura e outros segredos, e então reconstruir o ambiente a partir de backups confiáveis. Já os projetos não afetados devem fixar uma versão conhecida como segura até que a situação das contas de manutenção seja esclarecida.