Injection d'en-tête JKU JWT
| Gravité | Élevée |
|---|---|
| Classifications | |
| Catégorie OWASP | OWASP API2:2023 Broken Authentication |
La vulnérabilité « Injection d’en-tête JKU JWT » survient lorsqu’un serveur lit l’en-tête jku (URL du jeu de clés JWK) d’un token entrant, récupère le document JWKS à cette URL et l’utilise pour vérifier la signature. Comme l’attaquant contrôle l’en-tête, il peut pointer jku vers un serveur qu’il possède, servant une clé publique qu’il a générée. C’est aussi une primitive de falsification de requête côté serveur (SSRF), puisque la cible effectue une requête sortante vers une URL choisie par l’attaquant.
Pour plus de détails, consultez la documentation jwtop sur l’injection JKU.
Exemple
Section titled “Exemple”- L’attaquant héberge un document JWKS contenant sa propre clé publique.
- Il construit un token avec les revendications souhaitées et un en-tête
"jku": "https://attacker.example/jwks.json". - Il le signe avec la clé privée correspondante.
- Le serveur récupère le JWKS de l’attaquant, vérifie la signature avec celui-ci et accepte le token.
Comment tester ?
Section titled “Comment tester ?”Si vous voulez tester uniquement la vulnérabilité « Injection d’en-tête JKU JWT », vous pouvez utiliser la commande suivante :
vulnapi scan curl [url] -H "Authorization: Bearer [JWT]" --scans jwt.jku_injectionecho "[JWT]" | vulnapi scan openapi [OpenAPI_Path_Or_URL] --scans jwt.jku_injectionvulnapi scan graphql -H "Authorization: Bearer [JWT]" --scans jwt.jku_injection [url]Ce contrôle nécessite une cible en ligne capable d’atteindre un serveur de rappel exécuté par le scanner ; il ne s’exécute donc que lorsque le token utilise un algorithme asymétrique et qu’une adresse de rappel joignable a été configurée.
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.
- Falsification de requête côté serveur (SSRF) : la cible peut être forcée à effectuer des requêtes sortantes vers des URL choisies par l’attaquant.
- Usurpation de compte : se faire passer pour n’importe quel utilisateur du système.
Comment corriger ?
Section titled “Comment corriger ?”- Ignorer les URL fournies dans le token : ne récupérez jamais de clés à partir des en-têtes
jkuoux5u. Utilisez un jeu de clés configuré hors bande. - Liste d’autorisation des points de terminaison de clés : si la récupération dynamique est nécessaire, validez
jkuavec une liste d’autorisation stricte d’URL connues et de confiance. - Application stricte de l’algorithme : fixez toujours le ou les algorithmes attendus lors de la vérification d’un JWT.