JWT authentication bypass via flawed signature verification – PortSwigger Write Up

En este post vamos a estar resolviendo el laboratorio “JWT authentication bypass via flawed signature verification”:

Lo primero de todo es iniciar el laboratorio:

Una vez lo iniciamos, nos dirigimos a “My account” e iniciamos sesión con las credenciales que nos dan en la descripción del laboratorio:

Una vez hemos iniciado sesión, ya sea con Burp Suite, las herramientas de desarrollador o como en este caso, la extensión Cookie Editor, podemos ver que se nos ha asignado un JWT:

Podemos decodearlo en la web de jwt.io:

La vulnerabilidad que se explora en este laboratorio reside en que el servidor acepta JWTs sin firmar, es decir, con algoritmo “none”. Por lo que de cara a crear un token válido que no esté firmado, debemos de modificar el campo de “alg” en el header del token, y, además, eliminar la parte de la firma, la parte azul que se puede ver en la imagen de arriba, eso sí, el punto final deberemos de mantenerlo.

Otro detalle importante es que, cuando se está comprobando si el servidor acepta o no tokens sin firmar, se deben de probar distintas combinaciones de “none” como se muestra en el plugin JOSEPH de Burp Suite:

Por ejemplo, en el caso de este laboratorio el único que funciona es el algoritmo “none”, pero puede ocurrir lo contrario en otras ocasiones, por lo que siempre habrá que comprobar todos los posibles casos.

Dicho esto, para modificar el JWT que tenemos, es decir, modificar el algoritmo y eliminar la parte de la firma, lo podemos hacer de múltiples maneras, en este caso, usaremos la herramienta de jwtear:

Con esta herramienta, simplemente con el argumento -h especificamos el header del token, aquí indicaremos que usaremos el algoritmo “none”. Por otra parte, con el argumento -p concretamos el payload, que en este caso cambiaremos el usuario que queremos ser, en vez de wiener, pondremos administrator.

De cara a una auditoría real, nos interesaría ver primero si cambiando el algoritmo a “none” y usando el JWT generado, seguimos estando autenticados como wiener, una posible escalada podría venir después de verificar que seguimos autenticados y, por tanto, el servidor acepta JWTs sin firmar.

La herramienta nos muestra por pantalla directamente el token sin la firma, por lo que será directamente copiar y pegar. Copiamos este valor y lo pegamos en este caso en el Cookie Editor para cambiar el valor por el de nuestro token:

Actualizamos la página y:

Estamos autenticados como el usuario administrator. Con esto hecho, simplemente queda dirigirnos al panel de administración y borrar al usuario Carlos:

De esta manera, el laboratorio queda resuelto:

3 comentarios en “JWT authentication bypass via flawed signature verification – PortSwigger Write Up

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Subir para arriba