Volver al Blog
Ciberseguridad 24 de agosto de 2026 5 min read

Código malicioso en crates de Rust con 245 millones de descargas — y se ejecutaba al compilar, no en runtime

Credenciales comprometidas de un mantenedor publicaron versiones envenenadas de arrayref, internment y append-only-vec en crates.io, conectadas a una dependencia typosquat llamada proc-macro1 que ejecutaba malware durante cargo build. Esto es exactamente lo que debes revisar y qué versiones evitar.

Código malicioso en crates de Rust con 245 millones de descargas — y se ejecutaba al compilar, no en runtime

Tres crates de Rust muy utilizados distribuyeron malware en crates.io el 20 de agosto: arrayref 0.3.10, internment 0.8.7 y append-only-vec 0.1.9. Las tres versiones salieron de la cuenta comprometida del mantenedor David Roundy — usuario de crates.io desde octubre de 2009 — y solo arrayref acumula unos 245 millones de descargas históricas. El equipo de respuesta de seguridad de Rust recibió el aviso a las 07:15 UTC y retiró los paquetes rápido: las versiones maliciosas estuvieron en línea entre 86 y 107 minutos.

Lo que hace notable este ataque es el mecanismo de entrega. Las versiones envenenadas añadían una dependencia llamada proc-macro1, un typosquat del omnipresente proc-macro2. Su build script reconstruía la dirección del servidor de mando y control a partir de fragmentos en base64, desactivaba la validación de certificados TLS, elegía un payload según tu sistema operativo y arquitectura de CPU, y lo ejecutaba durante cargo build, cargo check o cargo test. No hacía falta llamar a una sola función del crate infectado. Bastaba con compilarlo — lo que pone en el radar a los runners de CI, los portátiles de desarrollo y a cualquiera que use cargo install.

El implante de segunda fase persistía mediante claves Run del registro en Windows, LaunchAgents en macOS y servicios de usuario de systemd en Linux. Según los investigadores de Wiz, roba credenciales de navegador de Chrome, Brave y Edge consultando sus bases de datos SQLite de inicios de sesión. Wiz también encontró un “solapamiento sustancial” con operaciones norcoreanas previas contra la cadena de suministro, incluidos los ataques a Mastra en npm y a axios — aunque ningún proveedor ha atribuido formalmente el incidente a un actor concreto.

El equipo de seguridad de Rust fue explícito en que Roundy es víctima, no autor: “No creemos que el autor de arrayref actuara con malicia, pero su equipo o sus credenciales están probablemente comprometidos”.

Qué hacer, en concreto:

  • Revisa tu caché local. Busca en ~/.cargo/registry/cache arrayref 0.3.10, internment 0.8.7 o append-only-vec 0.1.9. Si aparece alguna, trata la máquina como comprometida: rota credenciales y revisa los mecanismos de persistencia de arriba.
  • Audita los logs de CI en busca de builds entre las 05:30 y las 09:00 UTC del 20 de agosto que resolvieran versiones recién publicadas de estos crates.
  • Fija arrayref en 0.3.9 o anterior hasta que llegue una versión limpia.

El apunte estructural incómodo: Cargo no tiene un equivalente al periodo de enfriamiento de npm, que retrasa la resolución automática de versiones recién publicadas. Una respuesta en 90 minutos es genuinamente buena — y aun así no bastó para evitar que builds recientes descargaran el veneno. Hasta que el ecosistema incorpore una ventana de retardo o la atestación obligatoria de publicaciones, “comprometer el portátil de un mantenedor” seguirá siendo un ataque viable contra una cadena de dependencias con un cuarto de billón de descargas.

Fuentes

Rust supply chain attack crates.io security