Aller au contenu

Injection d'en-tête JKU JWT

GravitéÉlevée
Classifications
Catégorie OWASPOWASP 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.

  1. L’attaquant héberge un document JWKS contenant sa propre clé publique.
  2. Il construit un token avec les revendications souhaitées et un en-tête "jku": "https://attacker.example/jwks.json".
  3. Il le signe avec la clé privée correspondante.
  4. Le serveur récupère le JWKS de l’attaquant, vérifie la signature avec celui-ci et accepte le token.

Si vous voulez tester uniquement la vulnérabilité « Injection d’en-tête JKU JWT », vous pouvez utiliser la commande suivante :

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

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.

  • 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.
  • Ignorer les URL fournies dans le token : ne récupérez jamais de clés à partir des en-têtes jku ou x5u. 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 jku avec 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.