A primeira dependência nova em dez anos
A 20 de agosto de 2026, um atacante que tinha comprometido uma conta de mantenedor no crates.io, o registo oficial de pacotes Rust, usou esse acesso para publicar versões envenenadas de três crates muito usados: arrayref, internment e append-only-vec. O arrayref, sozinho, está presente em mais de 35 por cento de todos os ambientes Rust e em cerca de três em cada quatro ambientes onde o Rust aparece, o que o torna uma das bibliotecas pequenas mais omnipresentes de todo o ecossistema, apesar de passar quase despercebido.
A versão maliciosa arrayref 0.3.10 trazia um pormenor que, por si só, já deveria ter sido um sinal de alarme: era a primeira dependência nova que o arrayref tinha adicionado em toda a sua história de dez anos. Um crate que passou uma década inteira a lançar atualizações sem dependências e que, de repente, ganha uma, é exatamente o tipo de alteração que uma revisão cuidadosa de dependências deveria assinalar, caso alguém estivesse mesmo a fazer essa revisão.
Um script de build foi executado antes de qualquer código
Cada versão envenenada acrescentava uma dependência a um novo crate chamado proc-macro1, também ele malicioso. O proc-macro1 continha um script de build, um pequeno programa que o Cargo, a ferramenta de build do Rust, executa automaticamente como parte da compilação de um projeto, antes mesmo de o próprio código do projeto terminar de ser construído ou de ser executado.
Foi precisamente essa execução automática que tornou o ataque tão discreto: um programador ou um pipeline de CI não precisava de executar o binário final, clicar em nada nem importar uma função suspeita para ficar comprometido. Bastava executar cargo build num projeto que dependesse do crate envenenado para acionar o script de build e descarregar a carga útil do atacante.
Retirar e empurrar: um truque emprestado do npm
O atacante também retirou as versões antigas e limpas do arrayref, da 0.3.5 à 0.3.9, do registo. Retirar uma versão não a elimina por completo, mas faz com que o Cargo mostre o aviso habitual de que um projeto deveria considerar atualizar para uma versão que não esteja retirada.
Com todas as versões limpas marcadas como retiradas, a única versão não retirada que restava ao Cargo para recomendar era a maliciosa 0.3.10, o que empurrava os programadores para a versão envenenada através das próprias ferramentas do registo. Os investigadores de segurança já tinham identificado este mesmo padrão de retirar e empurrar em ataques anteriores à cadeia de fornecimento do npm, pelo que o seu aparecimento no crates.io sugere o mesmo guião de engenharia social através de ferramentas, e não uma invenção nova.
Três crates, três janelas curtas
As três versões maliciosas foram publicadas dentro de uma janela de 22 minutos na manhã de 20 de agosto de 2026, e as três foram removidas entre cerca de 90 a 107 minutos depois de entrarem em funcionamento, assim que a Rust Security Response Team bloqueou a conta comprometida e retirou os pacotes.
| Crate | Versão maliciosa | Publicado (UTC) | Removido (UTC) | Minutos ativo |
|---|---|---|---|---|
| arrayref | 0.3.10 | 07:15 | 08:41 | 86 |
| internment | 0.8.7 | 07:34 | 09:04 | 90 |
| append-only-vec | 0.1.9 | 07:37 | 09:25 | 107 |
Uma janela de menos de duas horas parece curta, mas o crates.io não tem qualquer atraso incorporado entre a publicação de uma nova versão e o momento em que qualquer projeto dependente a pode obter automaticamente na compilação seguinte, pelo que mesmo uma janela curta é suficiente para que um script de build alcance qualquer projeto que seja recompilado nesse período.
Roubo de credenciais, um kill switch e uma ligação à Coreia do Norte
A Wiz Research analisou a carga útil e encontrou uma backdoor que comunica com um servidor remoto através de HTTPS, enumera as credenciais guardadas no Chrome, no Brave e no Edge, instala persistência multiplataforma e consegue executar quatro comandos remotos distintos, incluindo um kill switch e um comando para executar scripts arbitrários.
A Wiz descobriu também que o ponto de contacto da backdoor partilha infraestrutura com a campanha Mastra, que a Microsoft atribuiu ao Sapphire Sleet, um grupo ligado à Coreia do Norte, e com um ataque anterior ao pacote npm axios que a Google Cloud Threat Intelligence e a Mandiant, separadamente, também associaram à Coreia do Norte, sugerindo que o mesmo tipo de agente que já tinha comprometido o npm demonstrou agora a mesma capacidade contra o crates.io. A descoberta é atribuída à Nextron Systems GmbH, uma empresa alemã de segurança; a Rust Security Response Team bloqueou a conta e retirou as três versões, e até agora não surgiu qualquer prova confirmada de exploração real.
O Rust resolve erros de memória, não quem controla a conta
O Cyber Resilience Act da UE e a NIS2 têm vindo, há algum tempo, a empurrar os fabricantes de produtos críticos para a segurança e produtos conectados para linguagens seguras em memória, e o Rust tem sido um dos principais beneficiários dessa pressão. Este incidente é um lembrete de que migrar para Rust por motivos de conformidade resolve um problema, os erros de segurança de memória como os buffer overflows, sem tocar num outro, completamente distinto: quem controla a conta que publica as dependências de um projeto, e o que um script de build tem permissão para executar antes de o próprio código do projeto sequer terminar de compilar.
Os proprietários que ordenaram uma migração para Rust por motivos de conformidade deveriam colocar três perguntas concretas às suas equipas de engenharia: se as atualizações de dependências são revistas antes de serem integradas, se o pipeline de CI consegue isolar ou restringir o que um script de build tem permissão para fazer, e se alguém repararia sequer numa retirada e nova publicação no mesmo dia de um pacote em que a equipa confia há anos. Vale a pena notar que a própria descoberta veio da Nextron Systems GmbH, uma empresa alemã, o que desmente qualquer suposição de que este risco na cadeia de fornecimento é apenas problema dos outros.
Leia a seguir: Ninguém consegue verificar o chip da sua chave de segurança | O seu orçamento de recompensas compra lixo de IA



