Laboratorio de seguridad · 003
PaperTrail
Un panel de notas con JWT, un secreto que viaja en el bundle y un agente interno que se fía de cualquiera que llame desde loopback.
- Media
- Linux
- Web
- JWT
- SSRF
Descripción del reto
El equipo de soporte tiene un panel de notas en el puerto 8080: te registras sin contraseña, recibes un JWT y lees tus notas. Detrás hay dos endpoints de administración y un agente de copias que escucha en loopback y no comprueba nada. El secreto de firma, por cierto, viaja en el fichero que tu navegador descarga al entrar.
Tu objetivo: leer /home/desk/flag.txt como el servicio y /root/root.txt a través del agente.
La vulnerabilidad
CVE-2026-18353 (SSRF con bypass de lista blanca de emisor)
El secreto de firma viaja en el bundle, el rol del JWT no se contrasta con la base y el servicio interno se fía de cualquier petición que llegue por loopback: se valida con un criterio y se conecta con otro.
Objetivos
User flag
20 ptsLlega a los endpoints de administración y lee /home/desk/flag.txt.
Root flag
20 ptsUsa el agente interno y lee /root/root.txt.
Reto completado
Las flags son únicas para tu sesión. Inicia la máquina para poder validarlas.
Antes de empezar
- 1Inicia la máquina
Pulsa «Iniciar máquina». Tarda alrededor de un minuto en estar lista.
- 2Abre el panel
Cuando arranque, tendrás una IP pública. El panel escucha en
http://<ip>:8080/. Entra, regístrate y mira el fichero/static/app.js. - 3Entrega las dos evidencias
Primero la del servicio; después, la de root a través del agente.
Contexto técnico
Reto propio sobre Debian 13: dos servicios Python. tokend atiende en 0.0.0.0:8080 como el usuario desk; el agente de copias escucha solo en 127.0.0.1:9090 como root.
La clase del fallo es la de CVE-2026-18353 (SSRF con bypass de la lista blanca de emisor OIDC, julio de 2026): se valida una URL con un parser y se conecta con otro, y el token se cree su propio rol. Se suma el secreto de firma servido en el bundle.