En este post vamos a estar resolviendo el laboratorio “JWT authentication bypass via weak signing key”:

Descripción del laboratorio JWT authentication bypass via weak signing key

Lo primero de todo es iniciar el laboratorio:

Botón para acceder al laboratorio

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

Página principal del laboratorio

Formulario de inicio de sesión

Página de cuenta de usuario wiener

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:

Cookie JWT en Cookie Editor

Podemos decodearlo en JWT.io:

JWT decodificado mostrando el usuario wiener

Si nos fijamos en este JWT se está usando el algoritmo HMAC, concretamente el HS256. Esto quiere decir que la firma y su comprobación se hace a través de una clave.

Lo interesante de esto es que es como si tuviésemos el hash de una contraseña, es decir, podemos intentar crackear el “secret” que se ha usado para firmar el JWT. En caso de que lo obtengamos, podremos firmar tokens JWT que sean válidos para el servidor, y, asimismo, podremos editarlos.

Para realizar la fuerza bruta podemos usar la herramienta de jwtear:

  • jwtear bruteforce -t <JWT> -l <diccionario>

Resultado de jwtear bruteforce mostrando el secret encontrado

En este caso, el servidor ha usado la palabra “secret1” para firmar los tokens JWT. Ahora que conocemos la palabra con la que se ha firmado los tokens, podemos intentar editar un JWT a nuestro beneficio y firmarlo usando “secret1”:

JWT modificado en JWT.io cambiando usuario a administrator

JWT firmado con el secret encontrado

Hemos cambiado el usuario de “wiener” por el de “administrator” con el fin de que, en caso de que la firma funcione y, el usuario “administrator” exista, podamos convertirnos en él.

Si ahora cambiamos nuestro JWT por el JWT que acabamos de generar y actualizamos:

Reemplazando el JWT en Cookie Editor

Panel de administrador tras el bypass exitoso

Nos convertimos en usuarios administradores :), todo debido a que se ha usado un “secret” débil en la firma de los JWT.

Ya simplemente para finalizar el laboratorio, nos dirigimos al panel de administración y eliminamos al usuario “carlos”:

Acceso al panel de administración

Botón para eliminar usuario carlos

Usuario carlos eliminado exitosamente

De esta manera, el laboratorio ya estaría completado:

Laboratorio completado con éxito

JWTear no es la única herramienta que se puede usar para hacer fuerza bruta a JWT, buscando un poco podemos encontrar infinidad de ellas:

Búsqueda de herramientas para crackear JWT en GitHub

Asimismo, podemos encontrar diccionarios para realizar fuerza bruta:

Diccionarios para JWT en repositorios de GitHub

SecLists también tiene un diccionario:

Diccionario de secrets JWT en SecLists