Uma crate Rust executou malware em tempo de compilação. 86 minutos.
Uma crate Rust de quatro macros com 260 milhões de downloads adiciona uma dependência, e `cargo build` executa o binário de um estranho em sua máquina.
Uma crate Rust de quatro macros com 260 milhões de downloads adiciona uma dependência, e `cargo build` executa o binário de um estranho em sua máquina. 20 de agosto de 2026: arrayref 0.3.10 chega ao crates.io dependendo de proc-macro1 — não proc-macro2, o verdadeiro — cujo script de build baixa um payload, o solta em /tmp/rust-setup e o gera de forma independente enquanto seu projeto compila. As versões limpas são removidas, então o próprio aviso do Cargo o leva à versão envenenada. 86 minutos depois, ela é deletada.
Leia a edição escrita (Inglês) ↗
O que este vídeo aborda
- cargo build executa o binário de um estranho
- As provas: Rust Blog, SafeDep, Hacker News
- Este é The Daily Diff, postmortem
- Cronograma: 02:11 staging → 07:15 publicado → 08:41 deletado
- Mecanismo: build.rs, sem sandbox, o atrativo do yank
Transcrição traduzida
Traduzido da narração original em inglês. Áudio e legendas disponíveis são controlados pelo YouTube.
cargo build executa o binário de um estranho
0:00 Uma crate Rust de quatro macros com um quarto de bilhão de downloads adiciona uma dependência, e cargo build executa o binário de um estranho em sua máquina. 20 de agosto de 2026. arrayref 0.3.10 chega ao crates.io dependendo de proc-macro1. Não proc-macro2, o verdadeiro: um dígito de diferença, e seu script de build executa um payload enquanto seu projeto compila. A equipe de segurança do Rust o deleta 86 minutos depois.
As provas: Rust Blog, SafeDep, Hacker News
0:22 SafeDep publica a análise detalhada. Hacker News: 554 pontos. Como acontece, por que Cargo permite, e quem leva a culpa. Este é The Daily Diff, postmortem. Duas da manhã, UTC.
Este é The Daily Diff, postmortem
0:33 Uma conta chamada d-tolney, uma letra diferente de David Tolnay, que mantém metade do Rust, publica proc-macro1 1.0.106: o verdadeiro
Cronograma: 02:11 staging → 07:15 publicado → 08:41 deletado
0:41 proc-macro2, renomeado. Em staging. 07:11. A versão 1.0.107 adiciona um script de build, além de base64, TLS e um cliente HTTP. Para um parser de tokens. 07:15. A conta do mantenedor republica arrayref como 0.3.10 e remove todas as versões mais antigas. Cargo imprime: considere atualizar para uma versão que não foi removida. A única que resta é a envenenada.
1:02 O aviso é o atrativo. No mesmo minuto, uma empresa de segurança reporta ao Rust. 07:54, um problema no RustSec. 08:29, um problema no repositório; o atacante responde com 0.3.11 e uma segunda dependência maliciosa. 08:41, deletado. Oitenta e seis minutos. Por quê? Primeiro: Cargo compila toda dependência declarada, chamada ou não. Uma linha de manifesto é suficiente.
1:21 Segundo: um script de build é executado em sua máquina, como você, com suas chaves SSH e token do cargo,
Mecanismo: build.rs, sem sandbox, o atrativo do yank
1:26 antes de seu código compilar. Sem sandbox, por design: é assim que as crates encontram bibliotecas C. Terceiro: dentro está o verdadeiro proc-macro2, então o build é bem-sucedido. O payload: um cliente TLS que confia em qualquer certificado busca um binário, o solta em /tmp/rust-setup e o gera de forma independente. No Windows, ele se desvia através de wscript para escapar do job object do Cargo; um comentário de código-fonte diz isso. A segunda fase, segundo o thread do RustSec: uma ferramenta de acesso remoto voltada para
1:52 navegadores e carteiras de criptomoedas. Poético, já que os maiores usuários de arrayref incluem secp256k1 e Solana. git blame. O modelo do Cargo, cinquenta e cinco por cento: dependências executam código em sua máquina em tempo de compilação, sem sandbox, e o aviso de remoção levou as pessoas ao
git blame — a divisão
2:07 veneno. Uma conta, trinta: uma credencial republica uma crate em que um quarto de bilhão de downloads confia. O dígito um, quinze: um pressionamento de tecla da crate mais confiável do Rust, e ninguém lê a árvore. Raio de explosão: 2.285 downloads em 86 minutos. Menos de dez por cento do tráfego, porque a maioria dos lockfiles continha 0.3.9. crates.io diz não haver evidência de uso.
Raio de explosão: 2.285 downloads
2:27 Duas pessoas no thread do RustSec discordam; uma encontra um serviço systemd. No Hacker News, o thread principal não é sobre o malware. É a página da crate, onde 0.3.10 agora nunca existiu. Veredito, postmortem: NEEDS REVIEW. Oitenta e seis minutos para deletar, um post no blog no mesmo dia, a conta bloqueada: essa parte é SHIP IT. Mas a página da crate mostra que nada aconteceu, cargo audit permanece em silêncio sobre uma cópia
Veredito + a linha de segunda-feira
2:48 em cache, e os scripts de build ainda são executados como você. Segunda-feira: execute o comando find do blog do Rust, e trate um aviso de remoção como uma pergunta, não uma instrução. Me envie o incidente sobre o qual você ainda não pode falar, nos comentários, ou em the daily diff dot dev. E esse é o diff de hoje. Sou Niko da Axrisi. Mescle com responsabilidade.
Fontes
- Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
- RUSTSEC-2026-0260 (arrayref)github.com
- RustSec issue #3161 (the original report, IOCs, victims)github.com
- SafeDep technical analysissafedep.io
- GitHub issue on the repo (0.3.11 spotted)github.com
- crates.iocrates.io
- Hacker News (554 points)news.ycombinator.com
- BleepingComputerwww.bleepingcomputer.com



