Ataque a la cadena de suministro de Rust
El proyecto Rust ha eliminado versiones maliciosas de tres crates populares tras la publicación de releases comprometidas que incluían una dependencia maliciosa. Este ataque se produjo debido a la intrusión en una cuenta de mantenimiento, que permitió la inclusión de un script de construcción capaz de descargar y ejecutar un payload remoto durante la compilación.
Las versiones afectadas son `arrayref` 0.3.10, `internment` 0.8.7 y `append-only-vec` 0.1.9, todas publicadas desde la misma cuenta de propietario el 20 de agosto de 2026 y retiradas en un corto lapso de 86 a 107 minutos. El problema radica en que el código malicioso se encontraba en el script de construcción de la dependencia inyectada, de modo que compilar un proyecto que lo resolviera era suficiente para ejecutar el payload.
Los desarrolladores deben revisar su caché de crates en `~/.cargo/registry/cache` en busca de los archivos de crates eliminados y se les aconseja fijar `arrayref` en la versión 0.3.9 o anterior. Aunque el Rust Security Response Team no ha asignado un identificador CVE a este incidente ni existe una versión corregida, los avisos de RustSec no muestran evidencia de que alguna versión maliciosa haya sido utilizada.
El equipo de seguridad recibió un informe sobre la malicia del crate `proc-macro1` a las 07:15 UTC y verificó que este crate incluía un script de construcción que descargaba un payload malicioso. En un aviso, se reconoció al equipo de investigación de Nextron Systems GmbH como los descubridores del problema. El equipo de Rust no considera que el autor de `arrayref` actuara de manera maliciosa, sugiriendo que sus credenciales podrían haber sido comprometidas.
La cuenta del propietario de `arrayref`, David Roundy, fue registrada en octubre de 2009. Aún se desconoce cómo se comprometió. Las versiones maliciosas fueron publicadas y retiradas rápidamente: - `arrayref@0.3.10`: publicada a las 07:15 y eliminada a las 08:41, online durante 86 minutos. - `internment@0.8.7`: publicada a las 07:34 y eliminada a las 09:04, online durante 90 minutos. - `append-only-vec@0.1.9`: publicada a las 07:37 y eliminada a las 09:25, online durante 107 minutos.
Cada release comprometida incluía una línea adicional en su manifiesto, una dependencia del crate `proc-macro1`, un typosquatting del muy utilizado `proc-macro2`. El código fuente de `proc-macro1` es una copia genuina de `proc-macro2`, lo que permitió que las compilaciones se completaran normalmente. El script de construcción reensambla la dirección del host del payload y el comando de control (C2) a partir de fragmentos en base64 durante el tiempo de construcción.
Además, instala un verificador de certificados personalizado que desactiva la validación de TLS, lo que permite la ejecución del payload. Dependiendo del sistema operativo y la arquitectura de CPU, el payload se escribe en diferentes ubicaciones, como `/tmp/rust-setup` en Unix y macOS, o se genera un script de PowerShell en `%TEMP%` en Windows.
La entrega dependió del hecho de que el propietario retiró las versiones `arrayref` 0.3.5 a 0.3.9 en el mismo minuto que la publicación maliciosa, lo que dejó la versión comprometida como la única no advertida por Cargo. Esta estrategia de engaño facilitó la explotación del problema.
El análisis del API de crates.io revela que `arrayref` ha alcanzado los 245,385,500 descargas en total, con 53,905,601 en los 90 días previos al 20 de agosto. Además, se identificaron 403 crates distintos en crates.io que dependen de él.
Este ataque pone de manifiesto la vulnerabilidad en la cadena de suministro del ecosistema de Rust, subrayando la necesidad de una atención continua hacia la seguridad en el desarrollo y mantenimiento de software.