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:
- https:\/\/github.com\/KSCHcuck1
- https:\/\/github.com\/CrackedProgramer412\/caca
- https:\/\/github.com\/MYnva
- https:\/\/github.com\/404log (muerto)
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:
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/blocked_ips.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/blocked_progr.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/refs\/heads\/main\/json\/blockedorg.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/blocked_GPUTYPE.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/nope.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/blocked_hwid.json
- https:\/\/raw.githubusercontent.com\/Mynva\/sub\/main\/json\/blockedpcname.json
- https:\/\/raw.githubusercontent.com\/MYnva\/sub\/refs\/heads\/main\/json\/blockedOS.json
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
- Método: Ejecuta el comando
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
- Método: ejecuta el comando de PowerShell
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
- Método: ejecuta el comando de PowerShell
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
- Método: aprovecha la biblioteca
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
- Método: ejecuta el comando
getFilesUrgents
Esta 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 comofiles.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
- Ejecución
- Persistencia
- Evasión de defensa
- Acceso a credenciales
- Descubrimiento
- Colección
- Comando y control
- Exfiltración
Técnicas
- Información o archivos ofuscados
- Descubrimiento de procesos
- Intérprete de comandos y scripting: PowerShell
- Intérprete de comandos y secuencias de comandos: JavaScript
- Datos en etapa de preparación: preparación de datos locales
- Detección de información del sistema
- Descubrimiento de archivos y directorios
- Captura de pantalla
- Datos del portapapeles
- Captura de video
- Evasión de virtualización/sandbox: comprobaciones del sistema
- Eliminación del acceso a cuentas
- Credenciales de almacenes de contraseñas: Credenciales de navegadores sitio web
- Debilitar defensas: deshabilitar o modificar herramientas
- Exfiltración a través de servicios sitio web: Exfiltración al espacio en la nube
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.
Observable | Tipo | Nombre | Referencia |
---|---|---|---|
ed164ee2eacad0eea9dc4fbe271ee2b2387b59929d73c843281a8d5e94c05d64 | SHA-256 | NOVABLIGHT VERSIÓN 2.2 | |
39f09771d70e96c7b760b3b6a30a015ec5fb6a9dd5bc1e2e609ddf073c2c853d | SHA-256 | NOVABLIGHT VERSIÓN 2.1 | |
97393c27195c58f8e4acc9312a4c36818fe78f2ddce7ccba47f77a5ca42eab65 | SHA-256 | NOVABLIGHT VERSIÓN 2.0 | |
api.nova-blight[.]top | Dominio | Panel de control de NOVABLIGHT | |
shadow.nova-blight[.]top | Dominio | Panel de control de NOVABLIGHT | |
nova-blight[.]site | Dominio | Panel de control de NOVABLIGHT | |
nova-blight[.]xyz | Dominio | Panel de control de NOVABLIGHT | |
bamboulacity.nova-blight[.]xyz | Dominio | Panel de control de NOVABLIGHT |
Referencias
A lo largo de la investigación anterior se hizo referencia a lo siguiente: