Aller au contenu

Secret JWT faible

GravitéÉlevée
CVEs
Classifications
Catégorie OWASP

OWASP API2:2023 Broken Authentication

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.

  • Secret commun : la clé secrète utilisée pour signer le JWT est une valeur commune, telle que secret, password, ou 123456. 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.

Voici un JWT valide signé avec l’algorithme HS256 et une clé secrète robuste :

Terminal window
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTYyNDI2MjIsImlhdCI6MTUxNjIzOTAyMiwibmFtZSI6IkpvaG4gRG9lIiwic3ViIjoiMmNiMzA3YmEtYmI0Ni00MTk0LTg1NGYtNDc3NDA0NmQ5YzliIn0.ZuwZrXpLRj17vDjOLoOOJ7pr1CN5DnE8Clgn4y-fjNs

Ce 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 :

Terminal window
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTYyNDI2MjIsImlhdCI6MTUxNjIzOTAyMiwibmFtZSI6IkpvaG4gRG9lIiwic3ViIjoiMmNiMzA3YmEtYmI0Ni00MTk0LTg1NGYtNDc3NDA0NmQ5YzliIn0.gTgBr6lotpAxs4M46PgUXrjhIN5-gYG4HffKSEIB6Ys

Si vous voulez tester uniquement la vulnérabilité « Secret JWT faible », vous pouvez utiliser la commande suivante :

Terminal window
vulnapi scan curl [url] -H "Authorization: Bearer eyJhbGciOiJSUzUxMiI..." --scans jwt.weak_secret

VulnAPI prend aussi en charge le scan d’autres types de vulnérabilités JWT.

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é.

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.