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 kid header path traversal 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 el servidor utiliza un archivo de su sistema para verificar la firma del token. En este caso, haremos que el servidor utilice un archivo del que conocemos su nombre y contenido (en el caso de los servidores Linux ‘/dev/null’, que es un archivo vacío y, por lo tanto, la firma será vacía también).

Nos llevamos el token a jwt.io para ver el algoritmo con el que ha sido firmado:

En este caso sabemos que se ha usado ‘HMAC con SHA-256’, acudiremos ahora a jwt_tool en Linux para modificar el token:

python3 jwt_tool.py eyJraWQiOiJmZTBkYWM1YS00Yjc4LTRjZjgtYTlhMC0xMDdlMGMwMmU3OTMiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTczNzE5MjkxOSwic3ViIjoid2llbmVyIn0.tdMAmCsp5UvYkzRW9RWyRwBXrSuoEwAMMPR1va_qivQ -I -hc kid -hv '../../../dev/null' -pc sub -pv administrator -S hs256 -p ''

Nota: Tendremos que probar cuantas ‘../’ hay que añadir. Si al sustituir la cookie generada y actualizar la página, esta desaparece, es que el servidor la habrá descartado y nos la habrá borrado.

En este caso, -S indica el algoritmo y -p la contraseña que se encuentra en el archivo ‘/dev/null’, que al estar vacío, es una contraseña vacía.

Al sustituir la correcta, podremos entrar a ‘Admin panel’ y borrar al usuario ‘carlos’, completando así el laboratorio:

Deja una respuesta

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