Retour au blog
OAuthauthentification

OAuth 2.0 PKCE : quand la protection est désactivée sans le savoir

Publié le 2026-03-307 min de lectureFlorian

PKCE : la protection que tout le monde croit avoir

PKCE (Proof Key for Code Exchange) est devenu le standard de sécurité pour les flux OAuth 2.0, notamment pour les applications SPA et mobiles. Il protège contre l'interception du code d'autorisation. Le problème : de nombreuses implémentations le désactivent sans le savoir.

Comment PKCE fonctionne

Le client génère un code_verifier aléatoire et envoie son hash (code_challenge) avec la requête d'autorisation. Lors de l'échange du code contre un token, le client envoie le code_verifier original. Le serveur vérifie que le hash correspond. Un attaquant qui intercepte le code d'autorisation ne peut pas l'échanger sans le code_verifier.

Le cas que nous avons trouvé : un portail de santé

Lors d'un audit sur une plateforme de santé utilisant OAuth pour l'authentification des praticiens, nous avons découvert que le flux PKCE était techniquement implémenté mais neutralisé. Le code_verifier était exposé via un endpoint non authentifié de l'application. Concrètement, un attaquant pouvait récupérer le code_verifier d'une session en cours, intercepter le code d'autorisation (via un réseau partagé ou une extension malveillante), et compléter le flux OAuth pour obtenir un token d'accès valide.

Le résultat : accès complet au dossier médical du praticien et à tous ses patients. La plateforme pensait être protégée par PKCE : elle ne l'était pas.

Les 4 erreurs d'implémentation PKCE les plus courantes

1. code_verifier stocké côté serveur accessible : le code_verifier est censé rester exclusivement côté client. Si votre backend le stocke et l'expose via une API, la protection est annulée.

2. code_challenge_method absent : sans spécifier S256 comme méthode de challenge, certains serveurs OAuth acceptent plain : le code_challenge EST le code_verifier, supprimant toute protection.

3. Serveur OAuth qui n'enforce pas PKCE : si le serveur accepte les échanges de code sans code_verifier, PKCE est optionnel et un attaquant peut simplement l'ignorer.

4. code_verifier prévisible : utiliser un UUID ou un timestamp au lieu d'un aléa cryptographique de 43+ caractères rend le code_verifier devinable.

Comment vérifier votre implémentation

  • Interceptez votre propre flux OAuth avec les outils développeur du navigateur
  • Vérifiez que code_challenge_method=S256 est présent dans la requête d'autorisation
  • Tentez un échange de code sans code_verifier : il doit échouer
  • Vérifiez qu'aucun endpoint ne retourne le code_verifier d'une session
  • L'impact pour les PME

    Si votre application utilise OAuth (Login with Google, Azure AD, Auth0, Keycloak), vérifiez que PKCE est réellement actif. Une faille OAuth donne un accès complet à la session utilisateur : pas seulement à un endpoint. Notre revue externe teste systématiquement les flux d'authentification OAuth.

    Articles liés

    Trois analyses proches pour continuer la lecture sur la meme surface de risque.

    Sources

    Rédigé par Florian
    Revu le 2026-03-30

    Analyse éditoriale fondée sur la documentation officielle des éditeurs, projets et autorités concernées.

    Services associés

    Si ce sujet reflète un risque concret sur votre stack, voici les audits CleanIssue les plus pertinents.

    Besoin d'une revue externe de votre SaaS RH ?

    Expliquez votre produit, votre stack et votre contexte client. Nous revenons vers vous avec le bon niveau de revue.

    Parler de votre audit