Secret JWT faible
| Gravité | Élevée |
|---|---|
| CVEs | |
| Classifications | |
| Catégorie OWASP |
Une vulnérabilité survient lorsqu’un JSON Web Token (JWT) est signé avec un secret commun, bien connu, ou faible. Dans ce scénario, le token manque d’une protection cryptographique adéquate, le rendant susceptible d’être manipulé. Les attaquants peuvent trouver le secret puis modifier les claims et le contenu du token sans être détectés, pouvant mener à un accès non autorisé et à une falsification des données.
Pour plus de détails, consultez la documentation jwtop sur le secret faible.
Quels sont les différents scénarios ?
Section titled “Quels sont les différents scénarios ?”- Secret commun : la clé secrète utilisée pour signer le JWT est une valeur commune, telle que
secret,password, ou123456. Les attaquants peuvent facilement deviner (par force brute) la clé secrète. - Secret bien connu : la clé secrète utilisée pour signer le JWT est une valeur bien 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, telle qu’une courte chaîne devinable comme
security2024. Les attaquants peuvent utiliser des attaques par dictionnaire, des rainbow tables, 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 uniquement la vulnérabilité « Secret JWT faible », vous pouvez utiliser la commande suivante :
vulnapi scan curl [url] -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans jwt.weak_secretecho "eyJhbGciOiJSUzUxMiI..." | vulnapi scan openapi [OpenAPI_Path_Or_URL] --scans jwt.weak_secretvulnapi scan graphql -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans jwt.weak_secret [url]VulnAPI prend aussi en charge le scan d’autres types de vulnérabilités JWT.
Quel est l’impact ?
Section titled “Quel est l’impact ?”L’impact de l’utilisation d’une clé secrète faible pour signer un JWT est significatif. Les attaquants peuvent facilement trouver 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 forte 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 atténuer le risque d’accès non autorisé et de falsification des données.