Aller au contenu

Attaque par relais inter-services de token

GravitéÉlevée
Classifications
Catégorie OWASPOWASP API2:2023 Broken Authentication

Cette vulnérabilité survient lorsqu’un JSON Web Token (JWT) est signé par le même service (ex. un fournisseur d’identité social) mais que l’application qui le reçoit ne vérifie pas le claim iss (émetteur) et/ou aud (audience). De nombreux fournisseurs d’identité utilisent la même paire de clés de signature pour tous leurs clients. Si une application ne vérifie que la signature mais pas le claim aud, un attaquant peut créer son propre projet chez le même fournisseur, obtenir un token valablement signé pour son propre projet, et le « relayer » vers l’application victime. L’application victime verra une signature valide provenant d’un fournisseur de confiance et acceptera le token à tort.

La plupart des fournisseurs d’identité sociale (Google, Facebook, Microsoft, Apple) utilisent des paires de clés partagées. Vous devez vérifier le claim aud pour vous assurer que le token était destiné à votre application.

Des services comme Firebase ou Google Identity Platform utilisent aussi des clés partagées. iss et aud doivent tous deux être vérifiés.

Un attaquant crée un projet chez le même fournisseur que la victime et obtient un token :

{
"iss": "https://accounts.google.com",
"aud": "attacker-project-id.apps.googleusercontent.com",
"sub": "user-to-impersonate",
"email": "victim@example.com"
}

Si l’application victime (avec client_id = victim-project-id) vérifie seulement que le token est signé par Google, elle acceptera ce token, permettant à l’attaquant d’usurper l’identité de la victime.

Vous pouvez utiliser jwtop decode pour inspecter les claims iss et aud des tokens que vous recevez :

Terminal window
jwtop decode [token]

Pour tester cette vulnérabilité :

  1. Créez un second projet avec le même fournisseur d’identité.
  2. Obtenez un token valide pour ce second projet.
  3. Envoyez-le à l’API de votre projet original.
  4. Si l’API accepte la requête, elle est vulnérable aux attaques par relais inter-services.

Un attaquant peut usurper l’identité de n’importe quel utilisateur possédant un compte chez le fournisseur d’identité partagé. Cela mène à une prise de contrôle complète de compte et à un accès non autorisé.

  • Vérifiez le claim aud : assurez-vous qu’il correspond au Client ID ou à l’identifiant de votre application.
  • Vérifiez le claim iss : assurez-vous qu’il correspond à l’URL d’émetteur attendue.
  • Utilisez des bibliothèques standard : la plupart des bibliothèques JWT fournissent un support intégré pour vérifier ces claims. Assurez-vous qu’il est activé et correctement configuré.