+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

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

  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