# Uma crate Rust executou malware em tempo de compilação. 86 minutos.

Published: 2026-09-15

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.

Canonical: https://thedailydiff.dev/pt-PT/video/2026-09-15-arrayref-proc-macro/

## 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"

## Capítulos

- 0:00 cargo build executa um binário desconhecido
- 0:20 Os comprovativos: Rust Blog, SafeDep, Hacker News
- 0:33 Isto é The Daily Diff, postmortem
- 0:40 Cronologia: 02:11 em "staging" → 07:15 publicado → 08:41 eliminado
- 1:25 Mecanismo: build.rs, sem sandbox, o engodo do "yank"
- 2:05 git blame — a divisão
- 2:25 Raio de explosão: 2.285 downloads
- 2:45 Veredito + a linha de segunda-feira

## 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

- [Rust Blog, "Supply chain attack on arrayref" (security-response, Aug 20, 2026)](https://blog.rust-lang.org/2026/08/20/supply-chain-attack-on-arrayref/) — blog.rust-lang.org
- [RUSTSEC-2026-0260 (arrayref)](https://github.com/rustsec/advisory-db/blob/main/crates/arrayref/RUSTSEC-2026-0260.md) — github.com
- [RustSec issue #3161 (the original report, IOCs, victims)](https://github.com/rustsec/advisory-db/issues/3161) — github.com
- [SafeDep technical analysis](https://safedep.io/arrayref-proc-macro1-rust-build-time-malware/) — safedep.io
- [GitHub issue on the repo (0.3.11 spotted)](https://github.com/droundy/arrayref/issues/33) — github.com
- [crates.io](https://crates.io/crates/arrayref) — crates.io
- [Hacker News (554 points)](https://news.ycombinator.com/item?id=49374269) — news.ycombinator.com
- [BleepingComputer](https://www.bleepingcomputer.com/news/security/hackers-poison-arrayref-rust-crate-to-push-infostealer-malware/) — www.bleepingcomputer.com
