Blog/JWT authentication bypass via unverified signature
JWT authentication bypass via unverified signature
Portswigger › Portswigger Labs › JWT Attacks

Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio utiliza un mecanismo basado en JWT para manejar las sesiones. Debido a fallos en su implementación, el servidor no verifica la firma de los JWT que recibe. Para resolver el laboratorio, debemos modificar nuestro token de sesión para obtener acceso al panel de administración en /admin y eliminar al usuario carlos. Podemos iniciar sesión en nuestra cuenta utilizando las credenciales wiener:peter
Guía de JWT Attacks
Antes de completar este laboratorio es recomendable leerse esta guía de JWT attacks https://justice-reaper.github.io/posts/JWT-Attacks-Guide/
Resolución
Al acceder a la web nos sale esto

Pulsamos sobre My account y nos logueamos con credenciales wiener:peter

Recargamos la página y capturamos la petición mediante Burpsuite

Debemos tener instalado la extensión JWT Editor, esta extensión nos avisará si detecta un token
![]()
Si pulsamos sobre la pestaña llamada JSON Web Token veremos todas las partes que componen al JWT

Modificamos el nombre de usuario en el payload

Hacemos Ctrl + Shift + i y pegamos el nuevo valor en el parámetro session

Recargamos la web con F5 y nos aparece el panel de administrador, lo que quiere decir que nos hemos convertidos en ese usuario

Esto ha sido posible debido a que las bibliotecas JWT suelen ofrecer un método para verificar tokens y otro que simplemente los decodifica. Por ejemplo, la biblioteca de Node.js llamada jsonwebtoken tiene los métodos verify() y decode(). En ocasiones, los desarrolladores confunden estos dos métodos y solo pasan los tokens entrantes al método decode(). Esto significa que la aplicación no verifica la firma en absoluto. Para completar el laboratorio debemos borrar el usuario carlos