¿Actualizaste axios? Enhorabuena: podrías estar infectado — hackers convirtieron la librería en un troyano y la propagaron entre millones de desarrolladores.

¿Actualizaste axios? Enhorabuena: podrías estar infectado — hackers convirtieron la librería en un troyano y la propagaron entre millones de desarrolladores.

Slack falso, llamada deepfake y troyano que se hace pasar por una actualización de Teams

image

El popular paquete de JavaScript axios, que utilizan millones de proyectos, se convirtió durante varias horas en un canal de distribución de código malicioso. Los atacantes comprometieron deliberadamente la cuenta del mantenedor principal y, a través de ella, publicaron versiones infectadas de la biblioteca.

El incidente se desarrolló el 31 de marzo. En pocas horas aparecieron en npm dos versiones de axios con carga maliciosa: 1.14.1 y 0.30.4. En ellas se introdujo la dependencia plain-crypto-js@4.2.1, que instalaba en los ordenadores de los desarrolladores un troyano de acceso remoto. Tras la instalación, los atacantes obtenían control total del sistema, incluso si se empleaba autenticación de dos factores.

La compromisión comenzó mucho antes de la publicación de los paquetes. Dos semanas antes del ataque, el mantenedor Jason Seiman recibió una invitación supuestamente del fundador de una empresa conocida. Los atacantes reprodujeron por completo la apariencia de la marca y construyeron una comunicación creíble. Primero añadieron al desarrollador a un espacio de trabajo de Slack con canales, publicaciones y perfiles de empleados que parecían reales.

Después siguió una llamada por Microsoft Teams. Al conectarse, el sistema mostró un mensaje que pedía actualizar. El desarrollador instaló el componente propuesto, creyendo que era una parte estándar del cliente. En lugar de una actualización, se descargó un RAT —un programa malicioso que dio a los atacantes acceso a la máquina.

Tras apoderarse de la cuenta, los atacantes subieron rápidamente las versiones infectadas de la biblioteca a npm. La primera apareció a las 00:21 UTC, la segunda aproximadamente cuarenta minutos después. Casi inmediatamente, miembros de la comunidad empezaron a notar un comportamiento sospechoso, pero los atacantes intentaron retrasar la reacción: eliminaban las incidencias creadas por usuarios desde la misma cuenta comprometida.

Se logró detener el ataque gracias a la rápida reacción de los desarrolladores. Uno de los colaboradores del proyecto contactó directamente con la administración de npm, tras lo cual las versiones maliciosas fueron eliminadas alrededor de las 03:15 y las 03:29 UTC. En unas horas, los paquetes infectados se habían propagado mediante los comandos habituales de instalación y actualización de dependencias.

El equipo de axios, tras el incidente, reconstruyó por completo la infraestructura. Restablecieron los accesos, cambiaron claves y tokens y reforzaron el proceso de publicación. Añadieron builds inmutables a la cadena de compilación, implantaron OIDC para la publicación y revisaron las prácticas de seguridad en GitHub Actions. Señalaron aparte un problema: las versiones se publicaban desde cuentas personales y no existía una verificación automática para detectar acciones no autorizadas.

El ataque fue vinculado al grupo norcoreano UNC1069. Según Mandiant, los atacantes usan ingeniería social sofisticada e herramientas basadas en IA. En operaciones similares, se comunicaban con las víctimas por Telegram o Zoom, reproducían videollamadas falsas con deepfakes de directivos y convencían para ejecutar comandos haciéndose pasar por la resolución de problemas técnicos.

El enfoque se basa en la confianza y la interacción prolongada. Los atacantes no apresuran a la víctima; pueden mantener correspondencia durante semanas y, poco a poco, llevarla al momento de la compromisión. Los objetivos principales son desarrolladores, empresas financieras, plataformas de criptomonedas y fondos de capital riesgo.

Para los desarrolladores, el riesgo resultó especialmente alto. axios forma parte de un gran número de proyectos, por lo que las versiones infectadas podían introducirse en el sistema mediante un npm install normal sin signos evidentes del ataque. El equipo del proyecto recomienda comprobar los archivos de dependencias package-lock.json y yarn.lock en busca de versiones vulnerables y del paquete plain-crypto-js.

Ante cualquier sospecha, se recomienda considerar el sistema comprometido: eliminar los paquetes maliciosos, limpiar el entorno y cambiar todas las claves, tokens y contraseñas. Además, conviene revisar los registros de red en busca de conexiones a direcciones sospechosas que se usaron en el ataque.

El incidente puso de manifiesto una debilidad de todo el ecosistema npm. Incluso una biblioteca popular con una comunidad activa sigue siendo vulnerable si los atacantes obtienen acceso a la cuenta del mantenedor. En ese caso, el código malicioso se distribuye mediante actualizaciones legítimas y las medidas de protección del lado de los usuarios actúan ya a posteriori.