23 minutos de ataque hacker a sus paquetes tiran por tierra años de reputación de un desarrollador

Actores maliciosos integraron de forma encubierta código malicioso en tres populares bibliotecas de Rust; para infectar un equipo, al desarrollador le bastaba compilar su proyecto. Resultaron afectadas arrayref, internment y append-only-vec, y la infraestructura de la operación se cruza con servidores que se vinculan a hackers norcoreanos.
El equipo de seguridad de Rust informó que el 20 de agosto se subieron al repositorio crates.io las versiones maliciosas arrayref 0.3.10, internment 0.8.7 y append-only-vec 0.1.9. Las tres bibliotecas eran mantenidas por el desarrollador David Roundy. Los expertos creen que los atacantes comprometieron su equipo o sus credenciales, y no al propio desarrollador.
La magnitud del incidente fue considerable. Arrayref se descargó aproximadamente 245 millones de veces en total y, según los datos de Wiz, el paquete aparece en más del 35% de los entornos analizados y en aproximadamente el 75% de los entornos donde se usa Rust. Por primera vez en los diez años de historia de arrayref, los atacantes añadieron a la biblioteca una dependencia, especificando el paquete proc-macro1 1.0.107.
El nombre proc-macro1 imitaba al popular paquete legítimo proc-macro2. Primero los atacantes publicaron una copia inocua de proc-macro2 con la versión 1.0.106, creando historial para el paquete, y horas después lanzaron la versión maliciosa 1.0.107. Su script de compilación se ejecutaba automáticamente por Cargo y descargaba un programa desde el servidor 23.254.165[.]112. Por eso no era necesario que el desarrollador invocara funciones de la biblioteca infectada: bastaba con compilar el proyecto.
El malware era compatible con Linux, Windows y macOS en varias arquitecturas. Los especialistas de Aikido analizaron la muestra y determinaron que el programa recopilaba información del sistema, examinaba los perfiles de Chrome, Brave y Edge —incluyendo los nombres de usuario guardados y los datos de las extensiones—, persistía en el sistema y recibía órdenes desde un servidor de comando. Las contraseñas de los almacenes de los navegadores no fueron descifradas por las muestras analizadas.
El ataque fue preparado con antelación. El 20 de agosto a las 07:11 UTC apareció la maliciosa proc-macro1 1.0.107; a las 07:15 se publicó arrayref 0.3.10; y a las 07:34 y 07:37 salieron internment 0.8.7 y append-only-vec 0.1.9. Así, las tres versiones infectadas fueron lanzadas en un intervalo de 23 minutos. Al mismo tiempo, las versiones antiguas y seguras de arrayref fueron masivamente marcadas como retiradas, lo que pudo haber inducido a Cargo y a los desarrolladores a actualizar.
Los especialistas de Wiz hallaron que la infraestructura se solapa de forma notable con operaciones norcoreanas. La ruta /49890878 en el servidor de comando había aparecido anteriormente en la campaña Mastra, que Microsoft vinculó con el grupo Sapphire Sleet. Las direcciones utilizadas también se solapan con la infraestructura de la operación UNC1069 contra el paquete axios, que Mandiant relacionó con Corea del Norte. Aún no se ha confirmado la pertenencia directa del nuevo ataque a una agrupación concreta.
El equipo de Rust eliminó los paquetes maliciosos y bloqueó las cuentas. Arrayref 0.3.10 estuvo en crates.io durante 86 minutos, internment 0.8.7 —90 minutos— y append-only-vec 0.1.9 —107 minutos. A los desarrolladores se les recomienda revisar Cargo.lock y la caché local de Cargo en busca de esas versiones, y considerar como potencialmente comprometidos los sistemas en los que llegaron a compilarse.