Unha crate de Rust executou malware no tempo de compilación. 86 minutos.
Unha crate de Rust de catro macros con 260 millóns de descargas engade unha dependencia, e `cargo build` executa un binario descoñecido na túa máquina.
Unha crate de Rust de catro macros con 260 millóns de descargas engade unha dependencia, e `cargo build` executa un binario descoñecido na túa máquina. 20 de agosto de 2026: arrayref 0.3.10 chega a crates.io dependendo de proc-macro1 —non proc-macro2, o real— cuxo script de construción descarga unha carga útil, a deixa en /tmp/rust-setup e a inicia en segundo plano mentres o teu proxecto compila. As versións limpas son retiradas para que a propia advertencia de Cargo te leve á envelenada. 86 minutos despois é eliminada.
Ler a edición escrita (inglés) ↗
Que abrangue este vídeo
- cargo build executa un binario descoñecido
- Os recibos: Rust Blog, SafeDep, Hacker News
- Isto é The Daily Diff, postmortem
- Cronoloxía: 02:11 preparación → 07:15 publicado → 08:41 eliminado
- Mecanismo: build.rs, sen sandbox, o atractivo da retirada
Transcrición traducida
Traducido da narración orixinal en inglés. O audio e os subtítulos dispoñibles son controlados por YouTube.
cargo build executa un binario descoñecido
0:00 Unha crate de Rust de catro macros cun cuarto de billón de descargas engade unha dependencia, e cargo build executa un binario descoñecido na túa máquina. 20 de agosto de 2026. arrayref 0.3.10 chega a crates.io dependendo de proc-macro1. Non proc-macro2, o real: un díxito de diferenza, e o seu script de construción executa unha carga útil mentres o teu proxecto compila. O equipo de seguridade de Rust elimínao 86 minutos despois.
Os recibos: Rust Blog, SafeDep, Hacker News
0:22 SafeDep publica a análise. Hacker News: 554 puntos. Como ocorre, por que Cargo o permite, e quen ten a culpa. Isto é The Daily Diff, postmortem. Dúas da mañá, UTC.
Isto é The Daily Diff, postmortem
0:33 Unha conta chamada d-tolney, unha letra de David Tolnay, quen mantén a metade de Rust, publica proc-macro1 1.0.106: real
Cronoloxía: 02:11 preparación → 07:15 publicado → 08:41 eliminado
0:41 proc-macro2, renomeado. Preparación. 07:11. A versión 1.0.107 engade un script de construción, ademais de base64, TLS e un cliente HTTP. Para un analizador de tokens. 07:15. A conta do mantedor volve publicar arrayref como 0.3.10 e retira todas as versións antigas. Cargo imprime: considere actualizar a unha versión que non foi retirada. A única que queda é a envelenada.
1:02 A advertencia é o reclamo. No mesmo minuto, unha empresa de seguridade infórmao a Rust. 07:54, un problema de RustSec. 08:29, un problema no repositorio; o atacante responde con 0.3.11 e unha segunda dependencia maliciosa. 08:41, eliminado. Oitenta e seis minutos. Por que? Un: Cargo constrúe cada dependencia declarada, sexa chamada ou non. Unha liña do manifesto é suficiente.
1:21 Dous: un script de construción execútase na túa máquina, como ti, coas túas claves SSH e o token
Mecanismo: build.rs, sen sandbox, o atractivo da retirada
1:26 de cargo, antes de que o teu código compile. Sen sandbox, por deseño: é así como as crates atopan bibliotecas C. Tres: dentro está o verdadeiro proc-macro2, polo que a construción ten éxito. A carga útil: un cliente TLS que confía en calquera certificado busca un binario, déixao en /tmp/rust-setup e o inicia en segundo plano. En Windows desvíase a través de wscript para escapar do obxecto de traballo de Cargo; un comentario da fonte así o di. A segunda etapa, segundo o fío de RustSec: unha ferramenta de acceso remoto dirixida a
1:52 navegadores e carteiras de criptomonedas. Poético, xa que os maiores usuarios de arrayref inclúen secp256k1 e Solana. git blame. O modelo de Cargo, cincuenta e cinco por cento: as dependencias executan código na túa máquina en tempo de compilación, sen sandbox, e a advertencia de retirada levou á xente ao
git blame — a división
2:07 veleno. Unha conta, trinta: unha credencial volve publicar unha crate na que confían un cuarto de billón de descargas. O díxito un, quince: unha pulsación de tecla da crate máis fiable de Rust, e ninguén le a árbore. Radio de explosión: 2.285 descargas en 86 minutos. Menos do dez por cento do tráfico, porque a maioría dos lockfiles mantiñan a 0.3.9. crates.io di que non hai evidencia de uso.
Radio de explosión: 2.285 descargas
2:27 Dúas persoas no fío de RustSec non están de acordo; unha atopa un servizo systemd. En Hacker News o fío principal non é sobre o malware. É a páxina da crate, onde 0.3.10 agora nunca existiu. Veredicto, postmortem: NEEDS REVIEW. Oitenta e seis minutos para eliminar, unha publicación no blog o mesmo día, a conta bloqueada: esa parte é SHIP IT. Pero a páxina da crate non mostra nada, cargo audit permanece en silencio sobre unha copia
Veredicto + a liña do luns
2:48 en caché, e os scripts de construción aínda se executan como ti. Luns: executa o comando de busca do blog de Rust, e trata unha advertencia de retirada como unha pregunta, non unha instrución. Envía o incidente do que aínda non se permite falar, nos comentarios, ou en the daily diff dot dev. E esa é a diferenza por hoxe. Son Niko de Axrisi. Fusionar con 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



