+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

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

  1. Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)blog.rust-lang.org
  2. RUSTSEC-2026-0260 (arrayref)github.com
  3. RustSec issue #3161 (the original report, IOCs, victims)github.com
  4. SafeDep technical analysissafedep.io
  5. GitHub issue on the repo (0.3.11 spotted)github.com
  6. crates.iocrates.io
  7. Hacker News (554 points)news.ycombinator.com
  8. BleepingComputerwww.bleepingcomputer.com

Vídeos relacionados