+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Un crate de Rust ejecutó malware en tiempo de compilación. 86 minutos.

Un crate de Rust de cuatro macros con 260 millones de descargas añade una dependencia, y `cargo build` ejecuta un binario desconocido en tu máquina.

Un crate de Rust de cuatro macros con 260 millones de descargas añade una dependencia, y `cargo build` ejecuta un binario desconocido en tu máquina. 20 de agosto de 2026: arrayref 0.3.10 llega a crates.io dependiendo de proc-macro1 —no proc-macro2, el real— cuyo script de compilación descarga una carga útil, la suelta en /tmp/rust-setup y la lanza de forma independiente mientras tu proyecto se compila. Las versiones limpias son retiradas, por lo que la propia advertencia de Cargo te lleva a la envenenada. 86 minutos después es eliminada.

Leer la edición escrita (inglés) ↗

Qué cubre este vídeo

  • cargo build ejecuta un binario desconocido
  • Los recibos: Rust Blog, SafeDep, Hacker News
  • Esto es The Daily Diff, postmortem
  • Cronología: 02:11 en preparación → 07:15 publicado → 08:41 eliminado
  • Mecanismo: build.rs, sin sandbox, el señuelo del retiro

Transcripción traducida

Traducido de la narración original en inglés. El audio y los subtítulos disponibles están controlados por YouTube.

cargo build ejecuta un binario desconocido

0:00 Un crate de Rust de cuatro macros con un cuarto de billón de descargas añade una dependencia, y cargo build ejecuta un binario desconocido en tu máquina. 20 de agosto de 2026. arrayref 0.3.10 llega a crates.io dependiendo de proc-macro1. No proc-macro2, el real: un dígito de diferencia, y su script de compilación ejecuta una carga útil mientras tu proyecto se compila. El equipo de seguridad de Rust lo elimina 86 minutos después.

Los recibos: Rust Blog, SafeDep, Hacker News

0:22 SafeDep publica el análisis. Hacker News: 554 puntos. Cómo ocurre, por qué Cargo lo permite y quién tiene la culpa. Esto es The Daily Diff, postmortem. Las dos de la madrugada, UTC.

Esto es The Daily Diff, postmortem

0:33 Una cuenta llamada d-tolney, una letra diferente a David Tolnay, quien mantiene la mitad de Rust, publica proc-macro1 1.0.106: el real

Cronología: 02:11 en preparación → 07:15 publicado → 08:41 eliminado

0:41 proc-macro2, renombrado. En preparación. 07:11. La versión 1.0.107 añade un script de compilación, además de base64, TLS y un cliente HTTP. Para un analizador de tokens. 07:15. La cuenta del mantenedor republica arrayref como 0.3.10 y retira todas las versiones anteriores. Cargo imprime: considera actualizar a una versión que no haya sido retirada. La única que queda es la envenenada.

1:02 La advertencia es el señuelo. En el mismo minuto, una empresa de seguridad lo reporta a Rust. 07:54, un problema de RustSec. 08:29, un problema en el repositorio; el atacante responde con 0.3.11 y una segunda dependencia maliciosa. 08:41, eliminado. Ochenta y seis minutos. ¿Por qué? Uno: Cargo compila cada dependencia declarada, sea invocada o no. Una línea en el manifiesto es suficiente.

1:21 Dos: un script de compilación se ejecuta en tu máquina, como tú, con tus claves SSH y el token

Mecanismo: build.rs, sin sandbox, el señuelo del retiro

1:26 de cargo, antes de que tu código se compile. Sin sandbox, por diseño: así es como los crates encuentran bibliotecas C. Tres: dentro está el verdadero proc-macro2, por lo que la compilación tiene éxito. La carga útil: un cliente TLS que confía en cualquier certificado descarga un binario, lo suelta en /tmp/rust-setup y lo lanza de forma independiente. En Windows se desvía a través de wscript para escapar del objeto de trabajo de Cargo; un comentario de la fuente lo dice. La segunda etapa, según el hilo de RustSec: una herramienta de acceso remoto dirigida a

1:52 navegadores y monederos de criptomonedas. Poético, ya que los mayores usuarios de arrayref incluyen secp256k1 y Solana. git blame. El modelo de Cargo, cincuenta y cinco por ciento: las dependencias ejecutan código en tu máquina en tiempo de compilación, sin sandbox, y la advertencia de retiro llevó a la gente al

git blame — la división

2:07 veneno. Una cuenta, treinta: una credencial republica un crate en el que confían un cuarto de billón de descargas. El dígito uno, quince: un golpe de teclado del crate más confiable de Rust, y nadie lee el árbol. Radio de impacto: 2.285 descargas en 86 minutos. Menos del diez por ciento del tráfico, porque la mayoría de los archivos de bloqueo tenían 0.3.9. crates.io dice que no hay evidencia de uso.

Radio de impacto: 2.285 descargas

2:27 Dos personas en el hilo de RustSec no están de acuerdo; una encuentra un servicio systemd. En Hacker News, el hilo principal no trata sobre el malware. Es la página del crate, donde 0.3.10 nunca existió. Veredicto, postmortem: NEEDS REVIEW. Ochenta y seis minutos para eliminar, una entrada de blog el mismo día, la cuenta bloqueada: esa parte es SHIP IT. Pero la página del crate muestra que no pasó nada, cargo audit permanece en silencio sobre una copia

Veredicto + la línea del lunes

2:48 cacheada, y los scripts de compilación todavía se ejecutan como tú. Lunes: ejecuta el comando find del blog de Rust, y trata una advertencia de retiro como una pregunta, no una instrucción. Envíame el incidente del que todavía no se te permite hablar, en los comentarios, o en the daily diff dot dev. Y eso es todo por hoy. Soy Niko de Axrisi. Fusiona con responsabilidad.

Fuentes

  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