Secret JWT faible
| Gravité | Élevée |
|---|---|
| CVE | |
| Classifications | |
| Schéma d’attaque | CAPEC-16: Dictionary-based Password Attack |
| Catégorie OWASP | OWASP API2:2023 Broken Authentication |
Une vulnérabilité survient lorsqu’un JSON Web Token (JWT) est signé avec un secret courant, connu, ou faible. Dans ce cas, le token n’a aucune protection cryptographique réelle et devient manipulable. Les attaquants peuvent retrouver le secret puis modifier les claims et le contenu du token sans être détectés, ce qui peut mener à un accès non autorisé et à une falsification des données.
Quels sont les différents scénarios ?
Section titled “Quels sont les différents scénarios ?”- Secret courant : la clé secrète utilisée pour signer le JWT est une valeur courante, telle que
secret,password, ou123456. Les attaquants peuvent facilement deviner la clé secrète par force brute. - Secret connu : la clé secrète utilisée pour signer le JWT est une valeur connue ou une valeur par défaut. Cela peut arriver lorsque vous utilisez une clé secrète par défaut fournie par un produit, une bibliothèque, ou un framework. Les attaquants peuvent trouver la clé secrète dans des dépôts publics, des forums, ou de la documentation.
- Secret faible : la clé secrète utilisée pour signer le JWT est une valeur faible, comme une courte chaîne facile à deviner telle que
security2024. Les attaquants peuvent utiliser des attaques par dictionnaire, des tables arc-en-ciel, ou d’autres techniques de force brute pour trouver la clé secrète.
Exemple
Section titled “Exemple”Voici un JWT valide signé avec l’algorithme HS256 et une clé secrète robuste :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTYyNDI2MjIsImlhdCI6MTUxNjIzOTAyMiwibmFtZSI6IkpvaG4gRG9lIiwic3ViIjoiMmNiMzA3YmEtYmI0Ni00MTk0LTg1NGYtNDc3NDA0NmQ5YzliIn0.ZuwZrXpLRj17vDjOLoOOJ7pr1CN5DnE8Clgn4y-fjNsCe JWT décodé contient ces parties :
{ "alg": "HS256", "typ": "JWT"}{ "iat": 1516239022, "exp": 1516242622, "name": "John Doe", "sub": "2cb307ba-bb46-4194-854f-4774046d9c9b"}Le JWT suivant est signé avec le secret secret :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTYyNDI2MjIsImlhdCI6MTUxNjIzOTAyMiwibmFtZSI6IkpvaG4gRG9lIiwic3ViIjoiMmNiMzA3YmEtYmI0Ni00MTk0LTg1NGYtNDc3NDA0NmQ5YzliIn0.gTgBr6lotpAxs4M46PgUXrjhIN5-gYG4HffKSEIB6YsComment tester ?
Section titled “Comment tester ?”Si vous voulez tester si votre serveur est vulnérable à la vulnérabilité « JWT Weak Secret », vous pouvez utiliser la commande crack :
jwtop crack [token] --url [url]Pour tenter de retrouver par force brute la clé secrète d’un token, utilisez la commande exploit weaksecret :
jwtop exploit weaksecret [token]Vous pouvez aussi fournir une wordlist personnalisée :
jwtop exploit weaksecret [token] --wordlist my-wordlist.txtPour les grandes wordlists, jwtop peut optionnellement se rabattre sur les outils externes john ou hashcat si son attaque par dictionnaire intégrée ne trouve pas le secret (voir crack » Outils de cracking externes) :
jwtop exploit weaksecret [token] --wordlist rockyou.txt --hashcatQuel est l’impact ?
Section titled “Quel est l’impact ?”L’impact d’utiliser une clé secrète faible pour signer un JWT est significatif. Les attaquants peuvent facilement retrouver la clé secrète et modifier les claims et le contenu du token sans être détectés. Cela peut mener à un accès non autorisé, une falsification des données, et d’autres risques de sécurité.
Comment corriger ?
Section titled “Comment corriger ?”Assurez-vous de changer la clé secrète pour une valeur robuste et unique. Utilisez un générateur aléatoire sécurisé pour créer la clé secrète et stockez-la de façon sécurisée. Faites tourner la clé secrète périodiquement pour limiter le risque d’accès non autorisé et de falsification des données.