Confusion HMAC JWT
| Gravité | Élevée |
|---|---|
| CVE | |
| Classifications | |
| Schéma d’attaque | CAPEC-475: Signature Spoofing by Improper Validation |
| Catégorie OWASP | OWASP API2:2023 Broken Authentication |
La confusion HMAC (aussi appelée confusion d’algorithme) exploite les serveurs qui font confiance au champ alg (algorithme) de l’en-tête JWT sans imposer un algorithme précis attendu.
L’attaque se déroule ainsi :
- Le serveur est configuré pour utiliser un algorithme asymétrique (ex. RS256) et possède une clé publique pour la vérification.
- Un attaquant change l’en-tête
algdeRS256àHS256(un algorithme HMAC symétrique). - L’attaquant signe le token forgé en utilisant la clé publique du serveur comme secret HMAC.
- Si la logique de vérification du serveur est vulnérable, elle voit
HS256, cherche un « secret », et utilise par erreur la clé publique RSA dont elle dispose. Comme l’attaquant a utilisé cette même clé publique pour signer le token, la signature est validée.
Exemple
Section titled “Exemple”Correspondance des algorithmes (même force en bits) :
- RS256 / ES256 / PS256 → HS256
- RS384 / ES384 / PS384 → HS384
- RS512 / ES512 / PS512 → HS512
La confusion
Section titled “La confusion”L’attaquant prend un token RS256 :
{ "alg": "RS256", "typ": "JWT"}Le transforme en HS256 :
{ "alg": "HS256", "typ": "JWT"}Et le signe en utilisant la clé publique RSA comme secret HMAC.
Comment tester ?
Section titled “Comment tester ?”Si vous voulez tester si votre serveur est vulnérable à la vulnérabilité « JWT HMAC Confusion », vous pouvez utiliser la commande crack :
jwtop crack [token] --url [url] --key [public_key_path]Pour générer un token confus, utilisez la commande exploit hmacconfusion :
jwtop exploit hmacconfusion [token] --key [public_key_path]Quel est l’impact ?
Section titled “Quel est l’impact ?”Une attaque par confusion HMAC réussie permet à un attaquant de forger des JWT arbitraires, menant à un contournement total de l’authentification et à un accès non autorisé à n’importe quel compte utilisateur ou fonctionnalité du système.
Comment corriger ?
Section titled “Comment corriger ?”- Épinglage de l’algorithme : configurez explicitement votre bibliothèque JWT pour n’accepter que l’algorithme prévu (ex.
RS256uniquement). - Validation du type de clé : assurez-vous que la clé utilisée correspond à l’algorithme (ex. n’autorisez pas une clé publique à être utilisée pour une opération HMAC).
- Chemins de vérification séparés : n’utilisez pas une unique fonction générique de « vérification » qui détermine l’algorithme à partir de l’en-tête du token.