+− 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 um binário desconhecido na sua máquina.

Uma crate Rust de quatro macros com 260 milhões de downloads adiciona uma dependência, e `cargo build` executa um binário desconhecido na sua máquina. 20 de agosto de 2026: arrayref 0.3.10 chega a crates.io dependendo de proc-macro1 — não proc-macro2, o verdadeiro — cujo script de construção descarrega um payload, o coloca em /tmp/rust-setup e o executa em segundo plano enquanto o seu projeto compila. As versões limpas são "yanked" (retiradas), então o próprio aviso do Cargo o leva à versão envenenada. 86 minutos depois é eliminado.

Ler a edição escrita (Inglês) ↗

O que este vídeo aborda

  • cargo build executa um binário desconhecido
  • Os comprovativos: Rust Blog, SafeDep, Hacker News
  • Isto é The Daily Diff, postmortem
  • Cronologia: 02:11 em "staging" → 07:15 publicado → 08:41 eliminado
  • Mecanismo: build.rs, sem sandbox, o engodo 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 um binário desconhecido

0:00 Uma crate Rust de quatro macros com um quarto de bilião de downloads adiciona uma dependência, e cargo build executa um binário desconhecido na sua máquina. 20 de agosto de 2026. arrayref 0.3.10 chega a crates.io dependendo de proc-macro1. Não proc-macro2, o verdadeiro: um dígito diferente, e o seu script de construção executa um payload enquanto o seu projeto compila. A equipa de segurança do Rust elimina-o 86 minutos depois.

Os comprovativos: 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. Isto é The Daily Diff, postmortem. Duas da manhã, UTC.

Isto é The Daily Diff, postmortem

0:33 Uma conta chamada d-tolney, uma letra de David Tolnay, que mantém metade do Rust, publica proc-macro1 1.0.106: o verdadeiro

Cronologia: 02:11 em "staging" → 07:15 publicado → 08:41 eliminado

0:41 proc-macro2, renomeado. Staging. 07:11. A versão 1.0.107 adiciona um script de construção, mais base64, TLS e um cliente HTTP. Para um analisador de tokens. 07:15. A conta do mantenedor republica arrayref como 0.3.10 e retira (yanks) todas as versões antigas. Cargo imprime: considere atualizar para uma versão que não foi retirada. A única que resta é a envenenada.

1:02 O aviso é o engodo. No mesmo minuto, uma empresa de segurança reporta-o ao Rust. 07:54, um problema RustSec. 08:29, um problema no repositório; o atacante responde com 0.3.11 e uma segunda dependência maliciosa. 08:41, eliminado. Oitenta e seis minutos. Porquê? Um: Cargo constrói todas as dependências declaradas, chamadas ou não. Uma linha no manifesto é suficiente.

1:21 Dois: um script de construção executa na sua máquina, como você, com as suas chaves SSH e o token

Mecanismo: build.rs, sem sandbox, o engodo do "yank"

1:26 do cargo, antes de o seu código compilar. Sem sandbox, por design: é assim que as crates encontram bibliotecas C. Três: dentro está o verdadeiro proc-macro2, então a construção é bem-sucedida. O payload: um cliente TLS que confia em qualquer certificado busca um binário, o coloca em /tmp/rust-setup e o executa em segundo plano. No Windows, ele desvia através de wscript para escapar ao "job object" do Cargo; um comentário no código fonte diz isso. A segunda fase, segundo o tópico RustSec: uma ferramenta de acesso remoto destinada a

1:52 navegadores e carteiras de criptomoedas. Poético, já que os maiores utilizadores de arrayref incluem secp256k1 e Solana. git blame. O modelo do Cargo, cinquenta e cinco por cento: as dependências executam código na sua máquina em tempo de compilação, sem sandbox, e o aviso de "yank" direcionou as pessoas para o

git blame — a divisão

2:07 veneno. Uma conta, trinta: uma credencial republica uma crate na qual um quarto de um bilião de downloads confia. O dígito um, quinze: uma tecla pressionada 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 que não há evidência de uso.

Raio de explosão: 2.285 downloads

2:27 Duas pessoas no tópico RustSec discordam; uma encontra um serviço systemd. No Hacker News, o tópico 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 eliminar, uma publicação 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 silencioso em uma cópia

Veredito + a linha de segunda-feira

2:48 em cache, e os scripts de construção ainda executam como você. Segunda-feira: execute o comando "find" do blog do Rust, e trate um aviso de "yank" como uma pergunta, não uma instrução. Envie-me o incidente sobre o qual ainda não tem permissão para falar, nos comentários, ou em the daily diff dot dev. E essa é a diferença de hoje. Sou o Niko da Axrisi. Mesclar 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