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.json

  • ou /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