Un sofisticado ataque a la cadena de suministro comprometió la ampliamente utilizada librería de JavaScript Axios, inyectando un troyano de acceso remoto (RAT) multiplataforma en lo que la firma de seguridad Wiz estima es el 80 por ciento de los entornos de nube y código. El incidente, que implicó la disponibilidad de versiones maliciosas del paquete npm durante aproximadamente tres horas, representa una de las brechas más significativas del ecosistema de código abierto, dadas las 100 millones de descargas semanales de Axios.
"Los hackers norcoreanos tienen una amplia experiencia en ataques a la cadena de suministro, que históricamente han utilizado para robar criptomonedas", afirmó John Hultquist, analista jefe del Grupo de Inteligencia de Amenazas de Google (GTIG), en un comunicado. "El alcance total de este incidente aún no está claro, pero dada la popularidad del paquete comprometido, esperamos que tenga impactos de gran alcance". El GTIG ha atribuido el ataque a UNC1069, un actor de amenazas norcoreano.
El ataque comenzó el 31 de marzo cuando el actor de amenazas publicó las versiones maliciosas [email protected] y [email protected] en el registro de npm. Esto se logró comprometiendo la cuenta de npm del mantenedor principal del proyecto y utilizando un token antiguo de larga duración para eludir el flujo de trabajo de publicación basado en OIDC, que es más seguro. Los paquetes maliciosos incluían una dependencia fantasma, plain-crypto-js, que contenía un script de post-instalación para descargar el RAT.
La brecha resalta una vulnerabilidad crítica en la cadena de suministro de software, afectando a una librería con casi 175,000 proyectos dependientes. El impacto del ataque en los entornos de desarrolladores y las tuberías de CI/CD podría conducir a un robo significativo de credenciales y al movimiento lateral dentro de las redes corporativas. Para empresas como Wiz y Snyk, el evento subraya la necesidad de una gestión de dependencias más estricta y una verificación en tiempo de ejecución, lo que podría aumentar la demanda de sus servicios de escaneo de seguridad e inteligencia de amenazas.
Cómo se desarrolló el ataque
Los atacantes demostraron una sofisticación operativa significativa. Unas 18 horas antes del ataque principal, una cuenta llamada nrwise publicó un paquete señuelo limpio, [email protected], para establecer un historial legítimo en el registro de npm. Poco antes del compromiso de Axios, lo actualizaron a la versión 4.2.1, que contenía la carga útil maliciosa.
Las versiones comprometidas de Axios agregaron este paquete malicioso como una dependencia. Cuando los desarrolladores instalaban o actualizaban Axios, se ejecutaba el script postinstall en plain-crypto-js, contactando a un servidor de comando y control (C2) en sfrclak.com para obtener malware específico de la plataforma.
El malware era un RAT multiplataforma con variantes para Windows, macOS y Linux.
- En macOS, el binario se escribió en
/Library/Caches/com.apple.act.mond y podía autofirmar cargas útiles inyectadas para eludir Gatekeeper.
- En Windows, se copió un script de PowerShell que se hacía pasar por Windows Terminal (
wt.exe) en %PROGRAMDATA%, estableciendo la persistencia a través de una clave Run del registro.
- En Linux, se almacenó un script de Python como
/tmp/ld.py y se ejecutó.
Tras desplegar la carga útil, el script intentó borrar su rastro reemplazando el package.json malicioso por una versión limpia, engañando a los desarrolladores que pudieran inspeccionar sus paquetes instalados.
Impacto generalizado y remediación
Aunque los paquetes maliciosos se eliminaron del registro de npm en tres horas, la alta velocidad de descarga de Axios significa que un número sustancial de sistemas se vieron comprometidos. Wiz informó haber observado la ejecución del malware en aproximadamente el 3 por ciento de los entornos afectados que monitorea. La firma de seguridad Huntress también informó de más de 100 dispositivos afectados.
Los expertos en seguridad instan a tomar medidas inmediatas. Se aconseja a las organizaciones que auditen sus archivos de bloqueo de proyectos (lockfiles) y los registros de CI/CD en busca de cualquier rastro de [email protected], [email protected] o [email protected].
"No intente limpiar los sistemas comprometidos. Reconstruya a partir de una instantánea (snapshot) que se sepa que está limpia", aconsejaron los investigadores de Snyk. Cualquier entorno donde se hayan instalado estas versiones debe tratarse como totalmente comprometido. Todas las credenciales, incluidos los tokens de npm, las claves de proveedores de nube y las claves SSH, deben revocarse y volver a emitirse.
Para una defensa a largo plazo, los equipos de seguridad deberían considerar la aplicación de npm ci --ignore-scripts en las tuberías de construcción automatizadas para evitar que se ejecuten scripts maliciosos. La implementación de políticas de antigüedad de paquetes, que bloquean la instalación de paquetes recién publicados, también podría haber evitado este ataque, ya que la dependencia maliciosa plain-crypto-js tenía menos de un día de vida.
Este artículo tiene fines informativos únicamente y no constituye asesoramiento de inversión.