Los investigadores de JFrog han descubierto tres paquetes npm maliciosos — aes-decode-runner-pro, postcss-minify-selector y postcss-minify-selector-parser — que se hacen pasar por herramientas de build legítimas y entregan un troyano de acceso remoto (RAT) para Windows en varias etapas. Los paquetes explotan la confianza de los desarrolladores en el ecosistema de PostCSS: el nombre postcss-minify-selector-parser imita a postcss-selector-parser, una biblioteca legítima con más de 127 millones de descargas semanales. En conjunto, los paquetes maliciosos se han descargado más de 1000 veces. Los desarrolladores que hayan instalado cualquiera de estos paquetes deben eliminarlos inmediatamente, limpiar los artefactos y rotar todas las credenciales en las máquinas afectadas.
Mecanismo de ataque: de npm install a un RAT completo
Según los investigadores, los tres paquetes fueron publicados durante el último mes por el usuario abdrizak. Los paquetes aes-decode-runner-pro y postcss-minify-selector-parser se presentan como utilidades para codificación AES y dependen del legítimo postcss-selector-parser. El paquete postcss-minify-selector se posiciona como un minificador de selectores CSS y depende de postcss-minify-selector-parser. Independientemente de cuál de los tres paquetes se instale, la cadena de ataque desemboca en el despliegue del mismo malware.
La cadena de infección consta de varias etapas:
- Un dropper JavaScript incrustado en el paquete escribe en disco el script de PowerShell
settings.ps1y lo ejecuta. - Un loader de PowerShell descarga la siguiente fase desde el servidor externo
nvidiadriver[.]netmediantecurl.exe. - El archivo ZIP descargado contiene el archivo VBS
update.vbs, un entorno de ejecución de Python, el loaderloader.pyy un conjunto de módulos de Python compilados (.pyd) construidos con Nuitka. - El script VBS configura el entorno de Python y lanza
loader.py, que activa la lógica principal del RAT.
Arquitectura modular del troyano
El RAT se implementa mediante un conjunto de módulos nativos de Python, cada uno responsable de una función concreta:
- config.pyd — constantes, identificadores de comandos, URL del servidor de mando y control, nombres de claves de registro
- api.pyd — intercambio de paquetes con el servidor C2 a través de HTTP
- audiodriver.pyd — bucle principal de orquestación del RAT (el nombre se elige para camuflarlo)
- command.pyd — perfilado del host, detección de máquinas virtuales, transferencia de archivos, ejecución de comandos de shell
- auto.pyd — robo de credenciales y datos de extensiones de Google Chrome con evasión del mecanismo App-Bound Encryption (ABE)
- util.pyd — funciones auxiliares para trabajar con archivos tar/gzip
La evasión de ABE — un mecanismo de protección de Chrome que vincula el cifrado a una aplicación concreta — hace que este RAT sea especialmente peligroso para los desarrolladores que almacenan en el navegador contraseñas y tokens de acceso a repositorios, sistemas de CI/CD y servicios en la nube.
Indicadores de compromiso
- Servidor C2:
95.216.92[.]207:8080 - Dominio de descarga de la carga útil:
nvidiadriver[.]net
Oleada de ataques a la cadena de suministro de npm
El descubrimiento de estos paquetes coincidió con varias campañas adicionales dirigidas al ecosistema npm, lo que apunta a un crecimiento sistémico de los ataques a la cadena de suministro a través de gestores de paquetes:
- El paquete apintergrationpost, según SafeDep, entrega un RAT para Linux llamado MYRA. Según se informa, compila un rootkit nativo en C durante la instalación, crea tres mecanismos de persistencia, se camufla como un servicio systemd y admite ejecución fileless.
- El paquete @withgoogle/stitch-sdk, según SafeDep, imita la herramienta Google Stitch AI y roba credenciales de desarrolladores desde ocho fuentes: Claude Code, git config, ~/.git-credentials, claves SSH, GitHub CLI, npm config, ~/.npmrc y ~/.docker/config.json. Los datos se envían al dominio
stitch-production[.]org. - Un clúster de cinco paquetes (procwire, routecraft, endpointmap, bytecraft, staticlayer) que entregan y ejecutan un dropper en hosts Windows durante la ejecución de npm install.
Por separado, SafeDep registró un ataque a la cadena de suministro a través del proyecto Egonex-AI/Understand-Anything, donde el código malicioso utiliza la blockchain Tron como infraestructura de mando y control: la dirección de la última transacción codifica el hash de una transacción BSC con la carga útil activa.
Evaluación del impacto
A pesar del número relativamente pequeño de descargas (alrededor de 1016 en total), el principal peligro radica en el público objetivo: los paquetes se dirigen a desarrolladores que utilizan PostCSS, una de las herramientas de procesamiento de CSS más populares. La compromisión de la máquina de un desarrollador abre el acceso a repositorios privados, secretos de CI/CD, tokens de proveedores cloud y claves de firma. El módulo auto.pyd, especializado en el robo de datos de Chrome, incluidas las extensiones, puede extraer tokens de gestores de contraseñas y sesiones de autenticación.
El uso del dominio nvidiadriver[.]net para descargar la carga útil es una técnica típica de ingeniería social: el nombre del dominio imita al software legítimo de NVIDIA y puede no despertar sospechas en un análisis superficial del tráfico de red.
Recomendaciones de respuesta
- Comprobar las dependencias de los proyectos en busca de los paquetes aes-decode-runner-pro, postcss-minify-selector, postcss-minify-selector-parser, apintergrationpost, @withgoogle/stitch-sdk, procwire, routecraft, endpointmap, bytecraft, staticlayer.
- Eliminar los paquetes maliciosos y todos los artefactos: archivos
settings.ps1,update.vbs,loader.py, directorios con el entorno de ejecución de Python y módulos.pyd. - Revisar las conexiones de red hacia
95.216.92[.]207:8080,nvidiadriver[.]netystitch-production[.]orgen los registros de proxy y DNS. - Rotar todas las credenciales en las máquinas afectadas: contraseñas de Chrome, claves SSH, tokens de GitHub/npm/Docker, secretos de CI/CD.
- Implantar políticas de revisión de dependencias: utilizar herramientas de auditoría (npm audit, Socket, Snyk) y bloquear la instalación de paquetes no revisados mediante lockfile y políticas de allowlist de paquetes.
- Configurar monitorización de la ejecución de PowerShell y wscript.exe desde directorios node_modules, ya que se trata de un comportamiento anómalo para paquetes npm.
Este caso ilustra claramente que incluso un pequeño paquete auxiliar que imita una dependencia de build popular puede ocultar un ataque multietapa completamente desarrollado. La acción clave para los equipos de desarrollo es comprobar de inmediato sus proyectos en busca de los paquetes enumerados, bloquear los indicadores de compromiso mencionados a nivel de infraestructura de red e implementar una auditoría automatizada de dependencias como fase obligatoria del pipeline de CI/CD.