Vulnérabilités JWT
Qu'est-ce que Vulnérabilités JWT ?
Vulnérabilités JWTClasses de défauts d'implémentation dans la validation des JSON Web Tokens permettant à un attaquant de forger des tokens, d'escalader des privilèges ou de contourner l'authentification.
Les JSON Web Tokens transportent des revendications d'authentification et d'autorisation, mais la flexibilité de leur algorithme de signature déclaré dans le header a engendré plusieurs classes récurrentes de vulnérabilités. Le bug alg=none, divulgué par Tim McLean en 2015, survient lorsqu'un vérifieur fait confiance au header alg du token lui-même et aiguille vers un vérifieur « none » qui renvoie vrai pour une signature vide — permettant à un attaquant de réécrire le payload et de supprimer la signature. Il a été corrigé dans le paquet jsonwebtoken de Node avant la version 4.2.2 (CVE-2015-9235).
La confusion de clé (CVE-2016-10555) est plus subtile : si un serveur accepte à la fois RS256 et HS256, un attaquant signe un token en HMAC en utilisant la clé RSA publique du serveur comme secret partagé ; un vérifieur naïf transmet cette clé publique à HS256.verify() et la contrefaçon passe. Les problèmes connexes incluent les secrets HS256 faibles cassables hors ligne avec hashcat, l'absence de vérification de exp/nbf, et les points d'injection dans le header — path traversal ou injection SQL via kid, et champs jwk/jku/x5u contrôlés par l'attaquant qui orientent la vérification vers une clé lui appartenant. En 2022, la CVE-2022-23529 dans jsonwebtoken a soulevé des inquiétudes de RCE via un objet de clé forgé (ultérieurement retirée après que les prérequis d'exploitation ont été contestés).
Parades : figer côté serveur le ou les algorithmes acceptés et ne jamais lire alg depuis une entrée non fiable, utiliser des clés asymétriques fortes, valider kid par rapport à une liste d'autorisation, ignorer les URL de clés embarquées, imposer l'expiration, et traiter chaque champ du JWT comme une entrée hostile.
flowchart TD
A[L'attaquant obtient un JWT valide] --> B{Altérer le header}
B -->|alg none, suppr. sig| C[Le vérifieur saute le contrôle ?]
B -->|RS256 vers HS256| D[HMAC avec la clé publique]
B -->|jku / kid pointe vers la clé de l'attaquant| E[Vérifier avec une clé pirate]
C -->|Oui| F[Token forgé accepté]
D -->|Oui| F
E -->|Oui| F
F --> G[Escalade de privilèges / contournement d'auth]
C -->|alg figé| H[Rejeté]
D -->|alg figé| H
E -->|kid en liste blanche| H● Exemples
- 01
Header {"alg":"none"} accepté par une librairie mal configurée.
- 02
Le serveur valide un token RS256 en utilisant sa clé publique comme secret HMAC HS256.
● Questions fréquentes
Qu'est-ce que Vulnérabilités JWT ?
Classes de défauts d'implémentation dans la validation des JSON Web Tokens permettant à un attaquant de forger des tokens, d'escalader des privilèges ou de contourner l'authentification. Cette notion relève de la catégorie Sécurité applicative en cybersécurité.
Que signifie Vulnérabilités JWT ?
Classes de défauts d'implémentation dans la validation des JSON Web Tokens permettant à un attaquant de forger des tokens, d'escalader des privilèges ou de contourner l'authentification.
Comment se défendre contre Vulnérabilités JWT ?
Les défenses contre Vulnérabilités JWT combinent habituellement des contrôles techniques et des pratiques opérationnelles, comme détaillé dans la définition ci-dessus.