Jia Yu ChanElastic Security Labs

Llamado de MaaS: Un ladrón de información resurge de las cenizas

NOVABLIGHT es un ladrón de información NodeJS desarrollado y vendido como una oferta MaaS; se emplea principalmente para robar credenciales y comprometer criptobilleteras.

18 minutos de lecturaAnálisis de malware
Llamado de MaaS: Un ladrón de información resurge de las cenizas

NOVABLIGHT de un vistazo

NOVABLIGHT es un ladrón de información Malware-as-a-Service (MaaS) basado en NodeJS, desarrollado y vendido por un grupo de amenazas que demuestra dominio del idioma francés. Esto es evidente en sus discusiones y comunicaciones operativas en sus principales plataformas de ventas y soporte, Telegram y Discord.

Según nuestro análisis de la última versión lanzada de NOVABLIGHT, el siguiente fragmento de código sugiere que Sordeal Group, el grupo detrás de Nova Sentinel y MALICORD, también es responsable de NOVABLIGHT.

Conclusiones clave

  • NOVABLIGHT es un ladrón de información descrito como una herramienta educativa, aunque los mensajes del canal de Telegram revelan información confidencial y capturas de pantalla sin redactar.
  • Las licencias de NOVABLIGHT son válidas por hasta un año y los binarios se pueden generar a través de Telegram o Discord.
  • Código muy ofuscado con muchas capacidades.

Descubrimiento

Elastic Security Labs identificó múltiples campañas que aprovechan descargas de instaladores de juegos de video falsos como señuelo de acceso inicial para infecciones MaaS de usuarios de Internet. En un ejemplo, la URL http://gonefishe[.]com aplicar al usuario descargar un binario e instalar una versión en francés de un juego con un nombre y una descripción comparables a uno lanzado recientemente en Steam.

Distribución, monetización y comunidad

El grupo publicitó y vendió su producto en varias plataformas en línea, anteriormente Sellix y Sellpass y actualmente Billgang.

El grupo vende una clave API, que caduca entre 1 y 12 meses. Esta clave se puede usar luego para crear una instancia de NOVABLIGHT a través de un bot de Telegram o mediante Discord.

El grupo promueve un programa de referencia en su canal de Discord con claves API como recompensa.

Los usuarios obtienen acceso a un panel alojado por el grupo que presenta la información recopilada de las víctimas. Se identificaron los siguientes dominios, aunque pueden existir otros:

  • api.nova-blight[.]top
  • shadow.nova-blight[.]top
  • nova-blight[.]site
  • nova-blight[.]xyz
  • bamboulacity.nova-blight[.]xyz

Algunas de las imágenes empleadas en el panel del tablero están alojadas en repositorios de GitHub asociados a diferentes cuentas, lo que ayudó a exponer más detalles sobre el grupo.

La cuenta de GitHub KSCHcuck1 es un pseudónimo similar al del autor anterior de MALICORD, una versión gratis de la primera versión del ladrón que estaba alojada en GitHub bajo la cuenta KSCH-58 (ENLACE AL ARCHIVO SITIO WEB). La cuenta X @KSCH_dsc también tenía similitudes y estaba promocionando activamente su "mejor ladrón jamás lanzado" tan recientemente como en 2023.

Se identificaron las siguientes cuentas de GitHub en relación con el grupo:

Su canal público de Telegram alberga tutoriales y una comunidad de usuarios. En la siguiente captura de imagen, los usuarios comparten capturas de pantalla del proceso de compilación.

Los usuarios del infostealer comparten abiertamente imágenes de artículos de lujo y transferencias de dinero, lo que es notable porque se describe que NOVABLIGHT tiene únicamente fines educativos.

Análisis NOVABLIGHT

NOVABLIGHT es un ladrón de información modular y rico en funciones creado en NodeJS con el marco Electron. Sus capacidades van más allá del simple robo de credenciales e incorporan métodos de recopilación y exfiltración de datos, detección en entornos sandbox y ofuscación intensa.

Un aspecto notable del proceso de construcción del malware es su configuración modular. Si bien un cliente puede elegir deshabilitar funciones específicas, el código subyacente para esas funciones permanece dentro de la carga útil final; está inactivo y no se ejecutará según los indicadores de configuración de la compilación.

Los fragmentos de código de este reporte provienen de una muestra de la versión 2.0 no ofuscada, cuando los detalles de implementación coinciden con los de las muestras de la versión 2.2, o de nuestro código desofuscado manualmente de una muestra de la versión 2.2 cuando difieren.

Estructura del código

Desde la configuración inicial hasta el robo de datos, el ladrón de información está organizado en un proceso claro y de múltiples etapas gestionado por controladores de "flujo" de alto nivel. Las etapas principales son:

  • flow/init: comprobaciones previas al vuelo (instancias en ejecución, privilegios de administrador, conectividad a Internet), comprobaciones antianálisis, enumeración de información del sistema, establecimiento de persistencia, etc.
  • flujo/inyección: Inyección de aplicaciones y parches (Atomic, Mullvad, Discord, …)
  • flow/grabb: Recopilación de datos
  • flow/ClipBoard: Secuestro del portapapeles
  • flujo/envío: Exfiltración de datos
  • flujo/deshabilitar: sabotaje del sistema (deshabilitar Windows Defender, anti-resetear del sistema, conectividad a Internet rota, …)
  • flujo/limpieza: Limpieza posterior a la exfiltración

Para obtener más información sobre la estructura del código, consulte este GitHub Gist, que enumera las dependencias directas de cada uno de los módulos principales y los flujos de ejecución de NOVABLIGHT.

Detección anti-depuración y sandbox

NOVABLIGHT incorpora múltiples técnicas para detectar y evadir entornos de análisis, combinando la toma de huellas ambientales con contramedidas activas. Estos controles incluyen:

  • Detección de nombres de GPU relacionados con VM (vmware, virtualbox, qemu)
  • Comprobación de nombres de usuario incluidos en la lista negra (sandbox, prueba, malware)
  • Identificación de archivos de controlador específicos de la máquina virtual (balloon.sys, qemu-ga)
  • Comprobación de baja resolución de pantalla y falta de dispositivos USB
  • Consultar GitHub para obtener listas negras de IP, HWID, nombres de usuario, programas, organizaciones, nombres de GPU, nombres de PC y sistemas operativos
  • Matar activamente herramientas de análisis y depuración conocidas que se encuentran en una lista remota

Las listas negras están alojadas en GitHub:

Deshabilitar Defender e intentos de deshabilitar el Administrador de tareas

NOVABLIGHT intenta deshabilitar Windows Defender y las funciones de seguridad de Windows relacionadas descargando y ejecutando un script por lotes, DisableWD.bat. de un repositorio público de GitHub.

El malware afirma ser capaz de deshabilitar el Administrador de tareas, lo que dificulta que un usuario sin conocimientos técnicos identifique y finalice el programa malicioso. Emplea setValues del paquete regedit-rs para establecer el valor DisableTaskMgr en 1 bajo HKCU\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\System.

Sin embargo, al observar el repositorio regedit-rs (v1.0.3 para que coincida), no hay funciones exportadas llamadas setValues, solo putValue. Es posible que esta funcionalidad no funcione como se espera.

Deshabilitar el acceso a Internet

Para interrumpir la conexión a Internet de la víctima, el malware emplea dos métodos distintos. El primero implica deshabilitar de forma persistente el adaptador Wi-Fi resetear repetidamente en un bucle rápido, empleando el paquete npm externo wifi-control y su función resetWiFi .

El segundo método deshabilita el adaptador de red principal “Ethernet” mediante el comando netsh , ejecutándolo cada 5 segundos para deshabilitar los intentos de reactivación.

Derrotar la recuperación del sistema

El malware puede sabotear la recuperación del sistema al deshabilitar el entorno de recuperación de Windows (reagentc /disable) y eliminar todas las instantáneas de volumen (vssadmin delete shadows /all) cuando la marca antireset está habilitada en la configuración.

Bloqueo de la eliminación de archivos

Otra función de sabotaje del sistema que puede ser evidente para la víctima implica hacer que el archivo ejecutable del malware no se pueda eliminar modificando sus licencias de seguridad a través de icacls “${filePath}” /deny ${currentUser}:(DE,DC) , donde DE niega los derechos de eliminación y DC impide la eliminación a través de la carpeta principal y, opcionalmente, creando un cuadro de mensaje emergente que contiene un mensaje "troll".

Antes de bloquear, también ejecuta un comando de PowerShell para eliminar la cuenta de la víctima de los siguientes grupos del sistema: Administrators, Power Users, Remote Desktop Users, Administrateurs.

Sustitución de la dirección del portapapeles

El malware implementa un módulo "clipper" que monitorea activamente el portapapeles de la máquina en busca de direcciones Crypto o Paypal y las reemplaza con direcciones definidas en la configuración. Si el usuario que creó la carga útil no proporcionó sus propias direcciones, el malware emplea de forma predeterminada un conjunto codificado, presumiblemente controlado por los desarrolladores para capturar fondos de sus usuarios menos experimentados.

Inyecciones de aplicación de electrones

NOVABLIGHT puede inyectar código malicioso en varias aplicaciones populares basadas en Electron. Las cargas útiles se obtienen dinámicamente desde el punto final https://api.nova-blight[.]top/injections/*targeted_application*/*some_key* y están dirigidas a aplicaciones como:

  • Cliente de Discord
  • Cartera Exodus
  • Cliente VPN de Mullvad
  • Monedero atómico
  • Cliente de email Mailspring

Pudimos recuperar todos los módulos de un repositorio público de GitHub.

La implementación de la inyección es un ejemplo tradicional de reempaquetado de Electron App: descomprimir el archivo ASAR, reescribir cualquier archivo fuente de destino y luego reempaquetarlo. Si observamos un ejemplo que involucra al cliente Mullvad, primero descomprime Program Files\\Mullvad VPN\\resources\\app.asar en un directorio temporal, obtiene una versión con puerta trasera de account.js desde https://api.nova-blight[.]top/injections/mullvad/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s, sobreescribir el archivo fuente account.js y, finalmente, lo vuelve a empaquetar. Si bien aún podría funcionar para versiones anteriores de Mullvad, como 2025.4, Esto no parece funcionar en la última versión de Mullvad.

En un caso similar para el cliente Exodus, los desarrolladores de NOVABLIGHT modificaron la función setPassphrase en el módulo principal de la aplicación Exodus, con funcionalidades adicionales de robo de credenciales.
Así es como se ve main/index.js en una publicación legítima de Éxodo 25.28.4:

En el index.js troyanizado, las contraseñas ingresadas por el usuario se filtran a través de webhooks de Discord configurables y Telegram, empleando la API oficial de Telegram o un proxy de API de Telegram personalizado.

Extracción de datos confidenciales de Chrome

Para atacar a los navegadores basados en Chromium (Brave, Chrome, Edge) que se ejecutan en la versión 137, el malware descarga un archivo zip que contiene una herramienta de descifrado de datos de Chrome desde https:\/\/github.com\/Hyutop\/pandakmc-auto-vote\/blob\/main\/bin.zip.

El repositorio de GitHub intenta hacer pasar por una herramienta de gestión de votaciones de Minecraft.

Sin embargo, el archivo zip bin.zip contiene el código compilado (decrypt.exe y chrome_decrypt.dll) de la versión 0.11.0 del proyecto PoC del descifrador vinculado a la aplicación Chrome de xaitax.

Enumeración del sistema

Una vez activo, NOVABLIGHT ejecuta un conjunto integral de funciones de enumeración del sistema diseñadas para crear un perfil completo de la máquina de la víctima y de la actividad del usuario. Cada módulo apunta a una pieza específica de información, que luego se almacena en un directorio local antes de cargar al servidor de comando y control. Los ingenieros de detección deben tener en cuenta las implementaciones específicas de cada técnica y qué fuentes de datos proporcionan suficiente visibilidad.

  • captureSystemInfo():Recopila especificaciones extensas de hardware y software para identificar el dispositivo. Esto incluye el ID de hardware (HWID), los modelos de CPU y GPU, el tamaño de RAM, la información del disco, la versión del sistema operativo Windows y una lista de todos los dispositivos USB conectados.
  • Salida: *configured_path*/System Info.txt

  • captureScreen():Captura una captura de pantalla completa del escritorio de la víctima, lo que proporciona información inmediata sobre la actividad actual del usuario.
    • Método: emplea la biblioteca de captura de pantalla de escritorio .
    • Salida: Un archivo de imagen con marca de tiempo (por ejemplo, `configured_path/hostname_2025-10-26_14-30-00.png`).
  • captureTaskList():Obtiene una lista de todos los procesos que se están ejecutando actualmente para conocer la situación, lo que permite al atacante ver qué aplicaciones y herramientas de seguridad están activas.
    • Método: Ejecuta el comando tasklist /FO CSV /NH.
    • Salida: *configured_path*/TaskManagerInfo.txt
  • captureAVDetails():Identifica el producto antivirus o de protección de puntos finales instalado consultando el Centro de seguridad de Windows.
    • Método: ejecuta el comando de PowerShell Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Format-List
    • Salida: *configured_path*/Avdetails.txt
  • captureClipboardContent(): Vuelca el contenido actual del portapapeles del usuario, que puede contener información transitoria y confidencial, como contraseñas o mensajes copiados.
    • Método: ejecuta el comando de PowerShell Get-Clipboard.
    • Salida: *configured_path*/Clipboard.txt
  • captureWebcamVideo():Graba de forma encubierta un video empleando la cámara sitio web principal del sistema, proporcionando información visual sobre la víctima y su entorno.
    • Método: aprovecha la biblioteca direct-synch-show para la captura de video.
    • Salida: *configured_path*/Bighead.avi
  • captureWifiPasswords():Exfiltra las contraseñas de todas las redes Wi-Fi almacenadas en el dispositivo, lo que permite un posible movimiento lateral o acceso a otras redes que emplea la víctima.
    • Método: ejecuta el comando netsh wlan show profile *wifi_ssid* key=clear para cada perfil.
    • Salida: *configured_path*/WifiPasswords.txt
  • getFilesUrgentsEsta funcionalidad extrae archivos del disco según un conjunto de palabras clave como las siguientes: copia de seguridad, default, code, discord, token, passw, mdp, motdepasse, mot_de_passe, login, secret, account, acount, apacht, banque, bank, matamask, wallet, crypto, exdous, 2fa, a1f, memo, compone, finance, seecret, credit, cni. Estos archivos se archivan como files.zip y luego se envían al C2.

Exfiltración de datos

Hay 3 canales para los datos robados: el panel sitio web oficial propiedad del grupo NOVABLIGHT, la API de webhook de Discord y la API de Telegram. El estado de estos canales es incierto, ya que la API de proxy principal y el panel sitio web están actualmente inactivos, lo que puede interrumpir la funcionalidad de los canales de Discord y Telegram si dependen de la misma infraestructura de proxy.

El panel sitio web alguna vez fue el canal oficial de exfiltración, ya que se publicitaba como su principal plataforma de gestión de datos.

La implementación de Telegram primero intenta enviar los datos a una URL proxy configurada, el código verifica si la URL contiene la cadena req en este caso https://bamboulacity.nova-blight[.]xyz/req/dVukBEtL8rW2PDgkwdwfbNSdG3imwU8bZhYUygzthir66sXXUuyURunOin9s.

Si la URL del proxy no está configurada o no cumple la condición, el módulo recurre a la comunicación directa con la API oficial de Telegram (en https://api.telegram[.]org/bot*token*/sendMessage) empleando un userId, chatId y botToken configurados para enviar los datos robados.

A diferencia del módulo Telegram, la implementación del webhook de Discord es mucho más simple. Emplea una única URL para la exfiltración sin ningún mecanismo de respaldo. Las muestras analizadas emplearon consistentemente la URL de proxy personalizada para este propósito.

NOVABLIGHT emplea una infraestructura redundante y de múltiples niveles. En lugar de depender de un único host de carga, lo que crearía un único punto de falla, el malware aprovecha una combinación de servicios legítimos de alojamiento de archivos de terceros y su propio backend dedicado. La siguiente es la lista extraída de dominios y puntos finales:

  • https://bashupload[.]com
  • https://litterbox.catbox[.]moe/resources/internals/api.php
  • https://tmpfiles[.]org/api/v1/upload
  • https://oshi[.]at/
  • http://sendfile[.]su/
  • https://wsend[.]net
  • https://api.gofile[.]io/servers
  • https://gofile[.]io/uploadFiles
  • https://rdmfile[.]eu/api/upload
  • https://bamboulacity.nova-blight[.]xyz/file/

Datos específicos

NOVABLIGHT ejecuta rutinas específicas diseñadas para robar credenciales y archivos de sesión de una lista específica de software instalado. La lista seleccionada está disponible en este GitHub Gist.

Técnicas de ofuscación

Mapeo de matrices

La primera técnica que hay que abordar es el uso del mapeo de matrices por parte del malware. El script inicializa una única matriz global grande __p_6Aeb_dlrArray con valores de diferentes tipos y codificaciones, lo que representa casi todos los valores literales empleados en el script.

Luego de sustituir las referencias del índice de la matriz, muchos fragmentos pequeños de cadenas que forman una cadena completa se dividen y concatenan en el tiempo de ejecución, pero en esta etapa, el número de versión de NOVABLIGHT se puede identificar fácilmente.

Codificación de cadenas

La segunda técnica empleada para ocultar cadenas es el uso de la codificación base91. La función contenedora __p_xIFu_MAIN_STR se llama con un argumento entero.

El entero es un índice de una matriz secundaria que asigna __p_9sMm_array y que contiene cadenas codificadas. Recupera la cadena codificada y la pasa a la rutina de decodificación __p_xIFu_MAIN_STR_decode.

__p_xIFu_MAIN_STR_decode Luego lo decodificará empleando un alfabeto personalizado:
vFAjbQox\>5?4K$m=83GYu.nBIh\<drPaN\^@%Hk:D_sSyz"ER9/p,(*JwtfO)iUl&C\[~\}\{|Z+gX1MqL;60!e]T#2cVW7 y devolverá la cadena decodificada.

Ofuscación de patrones de acceso

En lugar de acceder directamente a los objetos y funciones, el código emplea objetos “proxy” intermedios aplanados con claves destrozadas, envolviendo los objetos en otra capa de objetos para ocultar los patrones de acceso originales.

Por ejemplo, a la función __p_LQ1f_flat_… se le pasa un objeto plano __p_w3Th_flat_object. Este objeto contiene 3 descriptores de acceso para propiedades, uno de los cuales devuelve el indicador disabledNetwork recuperado de la configuración, y un contenedor para una llamada del despachador (__p_jGTR_dispatcher_26). A lo largo del código, hay un patrón donde los nombres de propiedad comienzan con empretecerian.js, que también es el nombre del archivo de script. La función llamada puede entonces acceder a los objetos y funciones reales a través de este objeto plano rellenado por el llamador.

Ofuscación del flujo de control

Parte de la ruta de ejecución del código se enruta a través de un despachador central, __p_jGTR_dispatcher_26, en el que el primer nombre del argumento toma una cadena de identificación corta.

Cada ID está asignado a una función distinta. Por ejemplo, el ID jgqatJ es referenciado por el módulo modules/init/Troll.js y es responsable de un cuadro de mensaje emergente “troll”.

Variables proxy

En primer lugar, la ofuscación transforma la sintaxis de la función en “sintaxis de parámetros restantes”, que reemplaza los parámetros con una matriz que almacena valores de variables en lugar de variables directas; luego, el código hace referencia a la matriz con valores numéricos. Por ejemplo, la función __p_xIFu_MAIN_STR_decode no se llama con parámetros directos. En cambio, sus argumentos se colocan primero en la matriz __p_A5wG_varMask (línea 22) y la función está programada para recuperarlos de índices predefinidos. Por ejemplo, en la línea 25, el índice -36 de la matriz almacena el índice del carácter "c" en una cadena almacenada en __p_A5wG_varMask[171].

NOVABLIGHT y MITRE ATT&CK

Elastic usa el framework MITRE ATT&CK para documentar tácticas, técnicas y procedimientos comunes que las amenazas persistentes avanzadas emplean contra las redes empresariales.

Táctica

Técnicas

Conclusión

NOVABLIGHT muestra cómo incluso el malware menos conocido puede tener impacto. Al ofrecer una herramienta pulida y fácil de usar a través de plataformas como Telegram y Discord, sus creadores hicieron que sea sencillo para cualquiera involucrar en el ciberdelito.

Además, esta amenaza no es estática. Nuestro análisis confirma que NOVABLIGHT está en desarrollo continuo y activo. Esta evolución continua garantiza que NOVABLIGHT seguirá siendo una amenaza persistente y relevante en el futuro previsible.

Detección de NOVABLIGHT

YARA

Elastic Security creó reglas YARA para identificar esta actividad.

rule Windows_Infostealer_NovaBlight {
    meta:
        author = "Elastic Security"
        creation_date = "2025-07-18"
        last_modified = "2025-07-28"
        os = "Windows"
        arch = "x86"
        category_type = "Infostealer"
        family = "NovaBlight"
        threat_name = "Windows.Infostealer.NovaBlight"
        reference_sample = "d806d6b5811965e745fd444b8e57f2648780cc23db9aa2c1675bc9d18530ab73"

    strings:
        $a1 = "C:\\Users\\Administrateur\\Desktop\\Nova\\"
        $a2 = "[+] Recording..." fullword
        $a3 = "[+] Capture start" fullword
    condition:
        all of them
}

Observaciones

En esta investigación se discutieron los siguientes observables.

ObservableTipoNombreReferencia
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64SHA-256NOVABLIGHT VERSIÓN 2.2
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853dSHA-256NOVABLIGHT VERSIÓN 2.1
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65SHA-256NOVABLIGHT VERSIÓN 2.0
api.nova-blight[.]topDominioPanel de control de NOVABLIGHT
shadow.nova-blight[.]topDominioPanel de control de NOVABLIGHT
nova-blight[.]siteDominioPanel de control de NOVABLIGHT
nova-blight[.]xyzDominioPanel de control de NOVABLIGHT
bamboulacity.nova-blight[.]xyzDominioPanel de control de NOVABLIGHT

Referencias

A lo largo de la investigación anterior se hizo referencia a lo siguiente: