
Démo de l'attaque par confusion d'algorithme sur diverses bibliothèques JWT
Démonstration de l'attaque par confusion d'algorithme sur les bibliothèques Json Web Token (JWT). Les JWT sont souvent utilisés dans les cookies pour certifier une session utilisateur, donc cette attaque est critique. Le module Node [email protected] a été utilisé pour démontrer la vulnérabilité.
Ce projet était également une belle activité de « vibe coding » car le front-end a été presque entièrement réalisé avec des LLMs en dehors des appels API.
Le format d'un JWT est le suivant :
b64(header).b64(payload).b64(signature)
With in our case:
header = (algorithm, type)
payload = (username, role)
À l'époque, les différentes bibliothèques JWT pouvaient signer avec un algorithme, mais n'imposaient pas d'algorithme et se fiaient plutôt au contenu de l'en-tête du JWT, laissant ainsi l'utilisateur décider de son propre chiffrement. Cela permet de nombreuses exploitations, mais celle utilisée dans ce cas est la suivante :
Authentifiez-vous en tant qu'utilisateur sur la page de connexion. Vous devrez d'abord vous inscrire.
Une fois sur la page d'accueil, il y aura un bouton qui ne peut être cliqué que si vous avez une session administrateur valide. Vous devrez alors exécuter l'exploit pour forger ce JWT.
Enfin, vous remplacez le JWT original par le JWT forgé dans le stockage local et après un rafraîchissement, le bouton devrait être cliquable et le flag est à vous !