Bypass d’authentification JWT via une signature non vérifiée

JWT authentication bypass via unverified signature

Contexte du laboratoire

Ce laboratoire utilise des JSON Web Tokens (JWT) pour gérer les sessions utilisateur. À cause d’un défaut d’implémentation critique, le serveur ne vérifie pas la signature des JWT reçus.

Objectif :

  • Modifier le token de session afin d’accéder au panneau d’administration /admin

  • Supprimer l’utilisateur carlos

Identifiants fournis :

  • wiener : peter

Étape 1 – Authentification et récupération du JWT

Après connexion avec l’utilisateur wiener, une cookie de session JWT est générée par l’application.

Le token a la structure classique :

  • Header

  • Payload

  • Signature

Étape 2 – Analyse du contenu du JWT

En décodant le JWT, on observe le payload suivant :

Le champ sub représente l’identité de l’utilisateur authentifié.

Étape 3 – Modification du payload

Puisque le serveur ne valide pas la signature, il est possible de modifier librement le contenu du token.

On remplace la valeur de sub :

Le JWT est ensuite reconstruit (peu importe la signature, elle ne sera pas vérifiée).

Étape 4 – Utilisation du JWT falsifié

Le nouveau token est injecté dans la cookie de session du navigateur.

Résultat :

  • L’application considère l’utilisateur comme administrator

  • L’accès à /admin est autorisé

Mis à jour