Bypass de l’authentification JWT par injection de JWK
JWT authentication bypass via jwk header injection
Description du laboratoire
Ce laboratoire utilise un mécanisme d’authentification basé sur des JWT pour gérer les sessions.
Le serveur accepte le paramètre jwk dans l’en-tête du JWT, ce qui permet d’embarquer directement la clé publique utilisée pour la vérification de la signature.
Cependant, l’implémentation est vulnérable : le serveur ne vérifie pas si la clé JWK fournie provient d’une source fiable. Il est donc possible de forger un token signé avec sa propre paire de clés.
Objectif du laboratoire :
Obtenir un accès au panneau d’administration
/adminSupprimer l’utilisateur carlos
Identifiants fournis :
wiener:peter
Analyse du JWT initial
Le JWT fourni utilise l’algorithme RS256, ce qui indique une signature asymétrique (clé privée pour signer, clé publique pour vérifier).
En-tête (extrait) :
alg: RS256kid: identifiant de clé
Payload :
sub: wieneriss: portswiggerexp: timestamp d’expiration


Génération d’une nouvelle paire de clés RSA
À l’aide de JWT Editor, une nouvelle clé RSA est générée. Cette clé contient notamment :
n(modulus)e(exponent)d,p,q, etc.un nouveau
kid
Cette paire de clés est entièrement contrôlée par l’attaquant.

Modification du payload
Le champ sub est modifié afin d’usurper l’identité de l’administrateur :
Injection du JWK dans l’en-tête
Dans l’en-tête du JWT, un champ jwk est ajouté.
Il contient la clé publique RSA correspondant à la clé privée utilisée pour signer le token.
Ainsi, le JWT :
déclare sa propre clé de vérification,
est signé avec la clé privée associée,
et reste cohérent du point de vue cryptographique.
Le serveur accepte cette clé sans vérifier son origine.

Signature du token
Le JWT est signé avec la clé privée générée précédemment. La signature est donc valide selon la clé JWK embarquée dans l’en-tête.

Résultat
Le serveur accepte le JWT forgé.
L’accès au panneau /admin est accordé avec les privilèges administrateur.
L’utilisateur carlos peut alors être supprimé, ce qui valide le laboratoire

Mis à jour