Libera tu mente y alcanza tus metas
Ataque a la cadena de suministro afecta al paquete NPM con 45.000 descargas semanales
Ataque a la cadena de suministro afecta al paquete NPM con 45.000 descargas semanales

Ataque a la cadena de suministro afecta al paquete NPM con 45.000 descargas semanales

Un paquete NPM llamado "rand-user-agent" fue comprometido en un ataque a la cadena de suministro para inyectar código ofuscado que activa un troyano de acceso remoto (RAT) en el sistema del usuario.

El paquete "rand-user-agent" es una herramienta que genera cadenas de user-agent aleatorias, lo cual resulta útil para el web scraping, las pruebas automatizadas y la investigación de seguridad. Aunque el paquete ha quedado obsoleto, sigue siendo bastante popular, con un promedio de 45.000 descargas semanales.

Sin embargo, según investigadores de Aikido, los actores de amenazas aprovecharon su estado semiabandonado, pero popular, para inyectar código malicioso en versiones posteriores no autorizadas que probablemente fueron descargadas por un número significativo de proyectos derivados.

Aikido detectó la vulnerabilidad el 5 de mayo de 2025, cuando su sistema de análisis de malware detectó una nueva versión de rand-user-agent, la 1.0.110. Tras un examen más profundo, los investigadores encontraron un código ofuscado oculto en el archivo 'dist/index.js' que solo era visible si el usuario se desplazaba horizontalmente en la vista de origen en el sitio NPM.

La investigación reveló que la última versión legítima de 'rand-user-agent' era la 2.0.82, publicada hace 7 meses. Las versiones 2.0.83, 2.0.84 y 1.0.110, publicadas posteriormente, eran maliciosas y no tenían versiones correspondientes en el repositorio de GitHub del proyecto.

El código malicioso incrustado en las versiones más recientes crea un directorio oculto en la carpeta de inicio del usuario (~/.node_modules) y extiende 'module.paths' para que esta ruta personalizada pueda usarse para cargar dependencias, concretamente 'axios' y 'socket.io-client'.

A continuación, abre una conexión de socket persistente con el comando y control (C2) del atacante en http://85.239.62[.]36:3306 y envía información del ID de la máquina, incluyendo nombre de host, nombre de usuario, tipo de sistema operativo y un UUID generado.

Una vez activa la RAT, escucha uno de los siguientes comandos:

  • cd <path> - Cambia el directorio de trabajo actual
  • ss_dir – Restablece el directorio de trabajo a la ruta del script
  • ss_fcd:<path> - Cambia forzosamente al directorio indicado
  • ss_upf:f,d – Sube un único archivo f al destino d
  • ss_upd:d,dest – Sube todos los archivos del directorio d al destino
  • ss_stop – Interrumpe cualquier subida de archivos en curso
  • (any_other) – Se ejecuta como un comando de shell mediante child_process.exec()

Al momento de escribir este artículo, las versiones maliciosas se han eliminado del repositorio del paquete en NPM, por lo que la última versión disponible es segura y los usuarios deberían volver a ella.

Sin embargo, si ha actualizado a las versiones 2.0.83, 2.0.84 o 1.0.110, es importante realizar un análisis completo del sistema para detectar indicios de vulnerabilidad. Tenga en cuenta que volver a la versión legítima no elimina el RAT de su sistema.

Además, considere usar versiones bifurcadas, pero con soporte y mejor monitorizadas, de la herramienta "rand-user-agent".

La investigación muestra que el atacante obtuvo un token de automatización obsoleto de un empleado y lo utilizó para publicar versiones en NPM. Dicho token no contaba con autenticación de dos factores, lo que le permitió al atacante: publicar versiones que no existían en GitHub, aumentar los números de versión para que parecieran legítimos y no descontinuar nada, con la esperanza de que las nuevas versiones se propagaran antes de que nadie lo notara.

No hay evidencia de una brecha en nuestro repositorio de código fuente. Construir canalización o red corporativa. El incidente se limitó al registro NPM.

Ofrecemos disculpas a todos los desarrolladores y organizaciones afectados por este incidente. Proteger el ecosistema de código abierto es una responsabilidad que nos tomamos muy en serio, y nos comprometemos a una transparencia total mientras cerramos todas las brechas que permitieron que ocurriera este ataque.

Fuente: BC