Bypass de l’authentification JWT avec une clé faible

JWT authentication bypass via weak signing key

Description du laboratoire

Ce laboratoire utilise un mécanisme de session basé sur les JWT. La clé secrète utilisée pour signer et vérifier les tokens est extrêmement faible, ce qui permet de la bruteforcer facilement à l’aide d’une liste de secrets courants.

Objectif :

  • Retrouver la clé secrète utilisée par le serveur.

  • Forger un JWT valide avec cette clé afin d’accéder au panneau d’administration /admin.

  • Supprimer l’utilisateur carlos.

Identifiants fournis : wiener:peter

JWT initial récupéré

On observe que l’algorithme utilisé est HS256, donc un algorithme symétrique reposant sur un secret partagé.

Bruteforce de la clé secrète

Nous utilisons une liste de secrets JWT courants :

Puis lancement de l’attaque par force brute avec hashcat :

Résultat :

  • Clé secrète trouvée : secret1

Préparation de la clé pour la signature

L’extension JWT Editor attend la clé au format Base64.

Encodage de la clé :

Création d’une clé symétrique dans JWT Editor :

Un identifiant de clé (kid) est alors généré et utilisé pour signer le token.

Modification du JWT

  • Interception de la requête contenant le JWT.

  • Modification du champ sub :

    • wieneradministrator

Re-signature du token avec la clé secrète trouvée

JWT final forgé :

Résultat

  • Le serveur accepte le JWT signé avec la clé faible.

  • Accès réussi au panneau /admin.

  • L’utilisateur est reconnu comme administrateur.

  • Le laboratoire est validé après suppression de l’utilisateur carlos.

Mis à jour