← RETOUR LAB
MODULE: TOKEN_MANIPULATION

JWT_BYPASS

STRUCTURE D'UN TOKEN JWT

Un JSON Web Token (JWT) est une chaîne de caractères divisée en trois parties par des points (.) :

Le serveur fait confiance aux données du payload UNIQUEMENT si la signature est valide. C'est comme un sceau de cire sur une lettre.

L'ATTAQUE "ALG: NONE"

La norme JWT définit un algorithme spécial appelé none. Il indique que le token n'est PAS signé.

Si le serveur accepte cet algorithme sans précaution, un attaquant peut modifier son propre token et supprimer la signature !

PROCÉDURE D'EXPLOITATION :

  1. Connectez-vous en tant que "guest".
  2. Copiez votre cookie auth_token.
  3. Décodez le Header (Base64) et changez "alg": "HS256" en "alg": "none".
  4. Décodez le Payload et changez "role": "recruit" en "role": "admin".
  5. Ré-encodez le tout en Base64Url sans la signature (laissez le dernier point mais rien après).
  6. Format final : HEADER_B64.PAYLOAD_B64.
  7. Remplacez votre cookie et rafraîchissez la page.
# EXEMPLE DE TOKEN FORGÉ header = base64('{"alg":"none","typ":"JWT"}') payload = base64('{"sub":"guest","role":"admin"}') token = header + "." + payload + "." # Notez le point final, obligatoire !

CORRECTION DU CODE

Pour éviter cette faille critique, le code de vérification ne doit JAMAIS faire confiance à l'algorithme spécifié dans le Header du token.

// MAUVAISE PRATIQUE $alg = $header['alg']; // Le hacker contrôle cette valeur ! // BONNE PRATIQUE // Forcez l'algorithme attendu lors de la vérification verify($token, $secret, ['HS256']);

De plus, rejetez explicitement tout token dont l'algorithme est none en production.