Bypass de l’authentification JWT par confusion d’algorithme
JWT authentication bypass via algorithm confusion
Description du laboratoire
Ce laboratoire utilise un mécanisme de session basé sur JWT. Les jetons sont normalement signés et vérifiés à l’aide d’une paire de clés RSA robuste. Cependant, une mauvaise implémentation rend l’application vulnérable à une confusion d’algorithme.
Objectif :
Récupérer la clé publique du serveur exposée via un endpoint standard.
Utiliser cette clé pour forger un JWT valide permettant l’accès au panneau d’administration
/admin.Supprimer l’utilisateur carlos.
Identifiants fournis :
wiener : peter
JWT initial
Le cookie de session contient le JWT suivant :
Récupération de la clé publique
La clé publique du serveur est accessible via :
/.well-known/jwks.jsonou
/jwks.json
Contenu retourné (JWKS) :

Modification du payload
Le payload du JWT est modifié afin d’usurper le compte administrateur :
Création RSA Key

Copie, colle fichier jwks.json

Conversion de la clé publique

La clé publique RSA est convertie au format PEM :

Cette clé est ensuite encodée en Base64.
Création d’une clé symétrique (oct)
La clé publique encodée en Base64 est utilisée comme secret HMAC :

Confusion d’algorithme
Le header du JWT est modifié pour forcer l’utilisation de HS256 :
Le serveur utilise alors la clé publique RSA comme secret HMAC, ce qui permet de signer un JWT accepté comme valide.

JWT final forgé
Ce jeton donne accès au panneau d’administration, permettant de finaliser le laboratoire en supprimant l’utilisateur carlos.

Mis à jour