Dos paquetes joyfill npm comprometidos ejecutan RAT cuando se importan a Node.js – CYBERDEFENSA.MX
Las versiones beta de dos paquetes npm en el espacio de nombres @joyfill se han visto comprometidas para entregar un troyano de acceso remoto (RAT) asociado con el DESARROLLADOR#POPPER familia de programas maliciosos.
La lista de paquetes afectados es la siguiente:
- @joyfill/layouts@0.1.2-2773.beta.0
- @joyfill/components@4.0.0-rc24-2773-beta.4
Los dos paquetes «contienen un implante de JavaScript en el momento de la importación que resuelve el código cifrado a través de transacciones de Tron, Aptos y BNB Smart Chain», afirmó Socket. dicho en un análisis.
A diferencia de otros paquetes maliciosos que se activan mediante un enlace de ciclo de vida de npm, el implante entregado como parte de las bibliotecas de JavaScript se ejecuta cuando Node.js carga el punto de entrada del paquete CommonJS.
Vale la pena señalar que el uso de una estructura de resolución de múltiples cadenas de bloques que comprende Tron, Aptos y BNB Smart Chain (BSC) se ha vinculado a un grupo de amenazas rastreado como PolinRider, que se considera relacionado con Contagious Interview.
A principios de este mes, Checkmarx y OpenSourceMalware destacaron un conjunto de paquetes npm maliciosos denominados colectivamente ViteVenom dirigidos al ecosistema de herramientas frontend de Vite utilizando la misma infraestructura de comando y control (C2) basada en blockchain para entregar una RAT con shell inverso, recolección de credenciales, exfiltración de archivos e inyección persistente de puerta trasera.
El implante consta de dos secuencias paralelas de acciones:
- Una rama en proceso que conduce a una carga útil recuperada de JavaScript de 77 KB con similitudes con la familia de malware DEV#POPPER.
- Una rama secundaria que inicia un proceso Node.js separado y solicita una carga útil de arranque independiente desde el 23.27.13.[.]43, descifra la respuesta y la evalúa.
Una vez que se carga el paquete, inicia un envío basado en blockchain que obtiene un hash de transacción BSC de la última transacción saliente de una dirección Tron codificada. Si este paso falla, consulta una cuenta de Aptos como alternativa para recuperar la transacción BSC y, a partir de ella, descifra y extrae el código JavaScript y lo ejecuta.
Tanto las sucursales en proceso como las independientes utilizan un conjunto distinto de direcciones de billetera, cuentas y transacciones para Tron, Aptos y BSC. El uso de blockchain también significa que ofrece resiliencia operativa y permite cambiar cargas útiles sin tener que publicar una nueva versión de los paquetes.
La primera carga útil en proceso es un cargador de JavaScript que emplea el método de resolución blockchain para recuperar un malware de segunda etapa llamado «clientCode». El proceso separado, por otro lado, consulta la dirección IP antes mencionada para obtener y ejecutar código JavaScript.
«Esta es una rama de entrega redundante, no una alternativa inofensiva», explicó Socket. «Está separado del proceso de importación de Node.js y puede continuar después de que salga un comando de compilación, prueba o CLI».
La carga útil final «clientCode» está muy ofuscada y funciona como una RAT de Node.js con las siguientes características, al tiempo que evita la ejecución en máquinas de desarrollo, CI o sandbox con los nombres de host github-runner, buildbot, buildkitsandbox y microsoft-standard-WSL2:
- Cargar archivos al host de carga configurado
- Recuperar JavaScript adicional
- Recopile detalles básicos del anfitrión
- Enviar mensajes de registro de estado
- Lea los datos del portapapeles a través de PowerShell en Windows, pbpaste en macOS y xclip o xsel en Linux
Se han asociado dos cargas útiles con el proceso separado: el RAT «clientCode» y un ladrón de información de Python que puede recopilar una amplia gama de datos de hosts comprometidos. Se considera una iteración del malware OmniStealer, cuyos detalles fueron destacado por primera vez por eSentire a principios de abril.
Los datos recopilados por el malware se encuentran a continuación:
- Información sobre el entorno y el anfitrión
- Datos del Administrador de credenciales de Windows y del Servicio secreto de Linux
- Datos de los navegadores Chromium y Firefox
- Almacenamiento de extensiones de navegador para billeteras y administradores de contraseñas
- credenciales de git
- Configuración de la CLI de GitHub
- Registros de escritorio de GitHub
- Almacenamiento de código de Microsoft Visual Studio
Socket le dijo a The Hacker News que tanto ViteVenom como la última colección de paquetes npm están conectados a la misma operación en curso por parte de actores de amenazas norcoreanos, en lugar de representar campañas separadas.
Según la empresa de seguridad de aplicaciones, se dice que ambas versiones maliciosas fueron publicadas por la misma identidad npm usando Node.js 18.20.0 y npm 10.5.0, con el código presente en el momento del paquete. Dicho esto, actualmente no está claro si esta inyección de código fuente se logró luego de comprometer una estación de trabajo de desarrollador, un repositorio de código fuente, un entorno de CI o credenciales de publicación.
Se recomienda a los desarrolladores que hayan instalado las versiones afectadas que las eliminen de los archivos de bloqueo, cachés, espejos internos, imágenes de compilación y artefactos de implementación, las fijen a una versión verificada y roten las credenciales del proceso Node.js afectado.
«La versión @joyfill/layouts debe ser tratada como capaz de ejecutar código arbitrario en el contexto de cualquier proceso que lo cargue», dijo Socket. «Esto incluye entornos de desarrollo, ejecutores de CI, herramientas de prueba, renderizado del lado del servidor y compilaciones».
«El código final recuperado puede recopilar información del host, establecer un canal de control remoto Socket.IO, ejecutar JavaScript o comandos de shell suministrados, cargar archivos, leer datos del portapapeles y modificar archivos que pertenecen a herramientas de desarrollo».






