Injection d'en-tête JWK JWT
| Gravité | Élevée |
|---|---|
| CVEs | CVE-2018-0114 |
| Classifications | |
| Catégorie OWASP | OWASP API2:2023 Broken Authentication |
La vulnérabilité « Injection d’en-tête JWK JWT » survient lorsqu’un serveur vérifie un JWT signé de façon asymétrique en utilisant la clé publique fournie dans l’en-tête jwk du token lui-même, plutôt qu’une clé à laquelle il fait déjà confiance. Comme l’attaquant contrôle cet en-tête, il peut générer sa propre paire de clés, placer la clé publique dans jwk et signer le token avec la clé privée correspondante. La signature est cohérente en interne, donc un vérificateur naïf l’accepte.
Pour plus de détails, consultez la documentation jwtop sur l’injection JWK.
Exemple
Section titled “Exemple”Une application attend des tokens signés avec RS256 et vérifiés avec une clé publique fixe. Si elle est vulnérable, un attaquant peut :
- Générer une nouvelle paire de clés RSA.
- Construire un token avec les revendications souhaitées et un en-tête contenant
"jwk": { ...clé publique de l'attaquant... }. - Le signer avec la clé privée de l’attaquant.
- Envoyer le token falsifié ; le serveur le vérifie avec la clé intégrée et l’accepte.
Comment tester ?
Section titled “Comment tester ?”Si vous voulez tester uniquement la vulnérabilité « Injection d’en-tête JWK JWT », vous pouvez utiliser la commande suivante :
vulnapi scan curl [url] -H "Authorization: Bearer [JWT]" --scans jwt.jwk_injectionecho "[JWT]" | vulnapi scan openapi [OpenAPI_Path_Or_URL] --scans jwt.jwk_injectionvulnapi scan graphql -H "Authorization: Bearer [JWT]" --scans jwt.jwk_injection [url]Ce contrôle ne s’exécute que lorsque le token testé utilise un algorithme asymétrique et qu’un serveur en ligne est disponible.
VulnAPI prend aussi en charge le scan d’autres types de vulnérabilités.
Quel est l’impact ?
Section titled “Quel est l’impact ?”- Contournement total de l’authentification : un attaquant peut falsifier des tokens pour n’importe quel utilisateur, y compris les comptes d’administration.
- Usurpation de compte : se faire passer pour n’importe quel utilisateur du système.
- Accès non autorisé : accès à des données sensibles et à des fonctionnalités privilégiées.
Comment corriger ?
Section titled “Comment corriger ?”- Ignorer les clés fournies dans le token : ne résolvez jamais la clé de vérification à partir des en-têtes
jwk,jku,x5coux5u. Utilisez une clé ou un jeu de clés configuré hors bande. - Liste d’autorisation des identifiants de clés : si la rotation des clés est nécessaire, résolvez
kidavec un jeu de clés de confiance côté serveur. - Application stricte de l’algorithme : fixez toujours le ou les algorithmes attendus lors de la vérification d’un JWT.