Los investigadores de ciberseguridad han revelado una nueva iteración de la actual campaña Contagious Interview, donde los actores de amenazas norcoreanos han publicado un conjunto de 26 paquetes maliciosos en el registro npm.
Los paquetes se hacen pasar por herramientas de desarrollador, pero contienen funcionalidad para extraer el comando y control real (C2) mediante el uso de contenido aparentemente inofensivo de Pastebin como un solucionador de caídas y, en última instancia, eliminan un ladrón de credenciales y un troyano de acceso remoto dirigidos a desarrolladores. La infraestructura C2 está alojada en Vercel en 31 implementaciones.
El campañarastreado por Socket y Kieran Miyamoto de kmsec.uk está siendo rastreado bajo el apodo StegaBin.
«El cargador extrae URL C2 codificadas esteganográficamente dentro de tres pastas de Pastebin, ensayos informáticos inofensivos en los que los caracteres en posiciones uniformemente espaciadas han sido reemplazados para deletrear direcciones de infraestructura ocultas», los investigadores de Socket Philipp Burckhardt y Peter van der Zee dicho.
La lista de paquetes npm maliciosos es la siguiente:
- argonista@0.41.0
- bcryptance@6.5.2
- abeja-quarl@2.1.2
- núcleo de burbuja@6.26.2
- corstoken@2.14.7
- daytonjs@1.11.20
- ether-lint@5.9.4
- expressjs-lint@5.3.2
- fastify-lint@5.8.0
- formmiderable@3.5.7
- hapi-lint@19.1.2
- iosysredis@5.13.2
- jslint-config@10.22.2
- jsnwebapptoken@8.40.2
- kafkajs-lint@2.21.3
- loadash-lint@4.17.24
- mqttoken@5.40.2
- prisma-lint@7.4.2
- promanage@6.0.21
- secuela@6.40.2
- tiporiem@0.4.17
- undicy-lint@7.23.1
- uuindex@13.1.0
- vitetest-lint@4.1.21
- windowston@3.19.2
- zoddle@4.4.2
Todos los paquetes identificados vienen con un script de instalación («install.js») que se ejecuta automáticamente durante la instalación del paquete, que, a su vez, ejecuta la carga útil maliciosa ubicada en «vendor/scrypt-js/version.js». Otro aspecto común que une a los 26 paquetes es que declaran explícitamente el paquete legítimo que están escribiendo como una dependencia, probablemente en un intento de hacerlos parecer creíbles.
La carga útil sirve como un decodificador de esteganografía de texto al contactar una URL de Pastebin y extraer su contenido para recuperar las URL C2 Vercel reales. Si bien los pegados aparentemente contienen un ensayo benigno sobre informática, el decodificador está diseñado para observar caracteres específicos en ciertas posiciones del texto y unirlos para crear una lista de dominios C2.
«El decodificador elimina los caracteres Unicode de ancho cero, lee un marcador de longitud de 5 dígitos desde el principio, calcula las posiciones de los caracteres espaciados uniformemente a lo largo del texto y extrae los caracteres en esas posiciones», dijo Socket. «Los caracteres extraídos luego se dividen en un separador ||| (con un marcador de terminación ===END===) para producir una matriz de nombres de dominio C2».
Luego, el malware llega al dominio decodificado para recuperar cargas útiles específicas de la plataforma para Windows, macOS y Linux, una táctica ampliamente observada en la campaña Contagious Interview. Uno de esos dominios, «ext-checkdin.vercel[.]app» sirve un script de shell, que luego contacta la misma URL para recuperar un componente RAT.
El troyano se conecta a 103.106.67[.]63:1244 a esperar más instrucciones que le permitan cambiar el directorio actual y ejecutar comandos de shell, a través de los cuales se implementa un conjunto integral de recopilación de inteligencia. Contiene nueve módulos para facilitar la persistencia de Microsoft Visual Studio Code (VS Code), el registro de teclas y el robo del portapapeles, la recolección de credenciales del navegador, el escaneo de secretos de TruffleHog y el repositorio Git y la filtración de claves SSH.
- vsque utiliza un archivo task.json malicioso para contactar un dominio de Vercel cada vez que se abre un proyecto en VS Code aprovechando el disparador runOn: «folderOpen». El módulo escanea específicamente el directorio de configuración de VS Code de la víctima en las tres plataformas y escribe el archivo task.json malicioso directamente en él.
- acortarque actúa como registrador de teclas, rastreador de mouse y ladrón de portapapeles con soporte para seguimiento activo de ventanas y realiza filtraciones periódicas cada 10 minutos.
- hermanoque es una carga útil de Python para robar almacenes de credenciales del navegador.
- jque es un módulo de Node.js utilizado para el robo de navegadores y criptomonedas dirigido a Google Chrome, Brave, Firefox, Opera y Microsoft Edge, y extensiones como MetaMask, Phantom, Coinbase Wallet, Binance, Trust, Exodus y Keplr, entre otras. En macOS, también apunta al llavero de iCloud.
- zque enumera el sistema de archivos y roba archivos que coinciden con ciertos patrones predefinidos.
- norteque actúa como RAT para otorgar al atacante la capacidad de controlar de forma remota el host infectado en tiempo real a través de una conexión WebSocket persistente a 103.106.67[.]63:1247 y exfiltrar datos de interés a través de FTP.
- trufaque descarga el legítimo Escáner de secretos de TruffleHog desde la página oficial de GitHub para descubrir y filtrar los secretos de los desarrolladores.
- gitque recopila archivos de directorios .ssh, extrae credenciales de Git y escanea repositorios.
- programadoque es lo mismo que «vendor/scrypt-js/version.js» y se vuelve a implementar como mecanismo de persistencia.
«Mientras que las oleadas anteriores de la campaña Contagious Interview se basaban en scripts maliciosos relativamente sencillos y cargas útiles alojadas en Bitbucket, esta última iteración demuestra un esfuerzo concertado para evitar tanto la detección automatizada como la revisión humana», concluyó Socket.
«El uso de esteganografía a nivel de personaje en Pastebin y el enrutamiento Vercel de múltiples etapas apunta a un adversario que está refinando sus técnicas de evasión e intentando hacer sus operaciones más resistentes».
La divulgación se produce cuando también se ha observado que los actores norcoreanos publican paquetes npm maliciosos (por ejemplo, express-core-validator) para recuperar una carga útil de JavaScript de la siguiente etapa alojada en Google Drive.
«Sólo se ha publicado un paquete con esta nueva técnica», Miyamoto dicho. «Es probable que FAMOUS CHOLLIMA continúe aprovechando múltiples técnicas e infraestructura para entregar cargas útiles de seguimiento. Es poco probable que esto indique una revisión completa de su comportamiento de etapa en npm».




