En este post vamos a resolver la máquina «FakeGPT» de nivel Easy de la plataforma Cyberdefenders.org . Si quieres empezar a realizar prácticas en sus laboratorios, o no sabes en qué consiste esta plataforma, he creado este post que te guiará a configurarlo y saber cómo usarla.
Al final del post verás un resumen de los conceptos trabajados en este laboratorio.
A tener en cuenta como contexto de resolución del laboratorio:
ESCENARIO Su equipo de ciberseguridad ha sido alertado de una actividad sospechosa en la red de su organización. Varios empleados informaron de un comportamiento inusual en sus navegadores después de instalar lo que creían que era una útil extensión del navegador llamada «ChatGPT». Sin embargo, empezaron a ocurrir cosas extrañas: las cuentas se estaban viendo comprometidas y parecía que se estaba filtrando información confidencial. Su tarea consiste en realizar un análisis exhaustivo de esta extensión e identificar sus componentes maliciosos. |
Lo primero es descargamos el fichero de evidencias en nuestra máquina bajo la carpeta que hemos creado del laboratorio. A continuación la descomprimimos dentro e introducimos la contraseña que nos proporciona el laboratorio.



En este caso nos descarga una serie de ficheros para analizar.
Estructura del contenido
PREGUNTA 1 : ¿Qué método de codificación utiliza la extensión del navegador para ocultar las URL de destino, lo que dificulta su detección durante el análisis?
Si analizamos los ficheros que nos aporta el laboratorio acerca de la extensión, veremos dentro del manifest.json que es el fichero principal que cargaría el navegador, varias llamadas a otros ficheros js como son el loader.js y app.js que van a hacer referencia a las funcionalidades de la extensión.

Si analizamos el contenido de ambos scripts, vemos que loader.js está ofuscando cierto contenido de variables mediante caracteres extraños, y también está llamando al js llamado app.js, el cual contiene información que indica que la codificación de encriptación está en base64:

PREGUNTA 2 : ¿Qué sitio web vigila la extensión en busca de robo de datos, apuntando a las cuentas de usuario para robar información sensible?
Si revisamos de nuevo el contenido de app.js, vemos una línea de código que apunta a una información cifrada en base64 por la que el propietario de la extensión no quiere que se visualice ese target o destino, por lo que lo codifica.

Sin embargo, si decodificamos ese texto, vemos que apunta a un dominio externo que es www.facebook.com :

PREGUNTA 3 : ¿Qué tipo de elemento HTML utiliza la extensión para enviar datos robados?
De nuevo, si analizamos ese script app.js , vemos al final de su contenido que se agrega una función que lo que hace es enviar la información recogida una vez activada la extensión, a su servidor mediante el uso de una imagen <img> que incluye la dirección de ese servidor que tiene el atacante y que además concatenará la información recogida de usuarios y contraseñas cuando el usuario se intente logar en www.facebook.com.

PREGUNTA 4 : ¿Cuál es la primera condición específica del código que hace que la extensión se desactive?
En este caso nos sirve con analizar el contenido del script loader.js y ver que en la primera línea del if para ser desactivado, se hace referencia a que si el navegador no tiene ninguna extensión activada, entonces la extensión maliciosa no correrá, por lo que sería:
navigator.plugins.length===0

PREGUNTA 5 : ¿Qué evento captura la extensión para rastrear las entradas de usuario enviadas a través de formularios?
Si volvemos de nuevo a analizar el contenido de app.js , vemos en el siguiente fragmento de código que está escuchando con un listener cada vez que una tecla es presionada mediante un submit (keydown
), y lo que hace es capturar la tecla ingresada (event.key
) y la envía a la función exfiltrateData()
, la cual la reenvía al servidor del atacante.
Esto indica que la extensión funciona como un keylogger, registrando las pulsaciones de teclas del usuario, lo que podría incluir credenciales, mensajes privados y otra información sensible.


PREGUNTA 6 : ¿Qué API o método utiliza la extensión para capturar y monitorizar las pulsaciones del usuario?
La extensión maliciosa utiliza el método addEventListener('keydown', function(event) {...}
para capturar y monitorizar las pulsaciones del usuario.
Explicación:
document.addEventListener('keydown', function(event) {...})
:- Escucha el evento
keydown
, que se activa cada vez que el usuario presiona una tecla (submit).
- Escucha el evento
event.key
:- Captura la tecla específica que el usuario ha presionado.
exfiltrateData('keystroke', key)
:- Envía la tecla capturada a la función
exfiltrateData()
, la cual posteriormente la encripta y la manda al servidor del atacante.
- Envía la tecla capturada a la función
PREGUNTA 7 : ¿Cuál es el dominio al que la extensión transmite los datos filtrados?
El dominio al que la extensión transmite los datos filtrados es:
https://Mo.ElShaheedy.com/collect?data=

La extensión maliciosa utiliza una petición de imagen (<img>
) para exfiltrar datos robados. La URL del atacante (Mo.ElShaheedy.com
) recibe los datos encriptados como parámetros en la URL. Este método evita algunas detecciones de seguridad porque las solicitudes de imágenes generalmente no son bloqueadas por CORS o firewalls.
PREGUNTA 8 : ¿Qué función del código se utiliza para filtrar las credenciales de usuario, incluidos el nombre de usuario y la contraseña?
La función utilizada para filtrar las credenciales de usuario, incluyendo el nombre de usuario y la contraseña, es: exfiltrateCredentials(username, password)
;

Flujo del código:
- Escucha eventos de envío de formularios (
submit
) en la página. - Obtiene los datos del formulario, específicamente los valores de los campos
"username"
,"email"
y"password"
. - Si encuentra credenciales, llama a la función
exfiltrateCredentials(username, password)
. - Los datos se envían al atacante usando otro método como
sendToServer()
después de ser encriptados.
PREGUNTA 9 : ¿Qué algoritmo de cifrado se aplica para proteger los datos antes de enviarlos?
El algoritmo de cifrado que se aplica para proteger los datos antes de enviarlos es AES (Advanced Encryption Standard), y esto lo vemos dentro del contenido del script app.js

Detalles clave del cifrado utilizado
✅ Algoritmo: AES (Advanced Encryption Standard)
✅ Librería: CryptoJS
✅ Clave utilizada: 'SuperSecretKey123'
(clave de 128 bits en formato UTF-8)
✅ Modo de cifrado: AES con un vector de inicialización (IV) de 16 bytes, lo que sugiere el uso de AES-CBC
✅ Salida cifrada: Se concatena el IV con el texto cifrado y se convierte a Base64 antes de enviarlo
PREGUNTA 10 : ¿A qué accede la extensión para almacenar o manipular datos relacionados con la sesión e información de autenticación?
Accede a chrome.storage
, cookies
y la API webRequest
para almacenar y manipular datos de sesión y autenticación.
Explicación breve para justificar la respuesta:
chrome.storage
: Almacena tokens de sesión o credenciales capturadas.cookies
: Permite acceder y leer cookies de autenticación de los usuarios.webRequest
: Intercepta solicitudes HTTP, incluyendo formularios de inicio de sesión y autenticación.

📌 Resumen de la resolución de la máquina «FakeGPT» Para resolver la máquina FakeGPT, primero analizamos el código de la extensión maliciosa que se hacía pasar por «ChatGPT». Descubrimos que utilizaba Base64 para ocultar las URLs de destino, lo que dificultaba su detección. Luego, identificamos que la extensión tenía como objetivo robar credenciales en www.facebook.com, registrando las pulsaciones de teclado ( keydown ) y enviando los datos robados a un servidor malicioso (Mo.ElShaheedy.com ). También encontramos que utilizaba una estrategia evasiva, desactivándose si detectaba que estaba en un entorno virtualizado o sin extensiones activas ( navigator.plugins.length === 0 ). La exfiltración de datos se realizaba mediante una etiqueta <img> , una técnica que evita restricciones de seguridad.Además, la extensión cifraba la información antes de enviarla, utilizando AES con un IV aleatorio, dificultando su análisis. Finalmente, revisamos el archivo manifest.json , donde descubrimos que tenía permisos peligrosos como acceso a cookies, almacenamiento (chrome.storage ) y la capacidad de interceptar tráfico (webRequest ). Estos permisos le permitían capturar sesiones, modificar peticiones y almacenar datos sensibles. En conclusión, esta extensión actuaba como un keylogger y herramienta de robo de credenciales, mostrando cómo los atacantes pueden usar extensiones maliciosas para espiar a los usuarios sin que lo noten. |
Te dejo también este vídeo explicativo paso a paso que me ha ayudado a entender y resolver este laboratorio.