Authentification : JWT, OAuth, sessions, les failles qu'on voit le plus
> En bref : Les erreurs d'implémentation les plus fréquentes sur JWT, OAuth 2.0 et les sessions classiques, avec des exemples concrets et les corrections.
L'authentification, maillon faible numéro un
L'authentification est le mécanisme le plus critique de toute application. Une faille ici donne un accès direct aux comptes utilisateurs. Malgré la maturité des bibliothèques disponibles, nous trouvons des erreurs d'implémentation dans la majorité des applications auditées chez CleanIssue.
JWT : les erreurs classiques
Algorithm confusion (alg=none)
Le standard JWT permet de spécifier l'algorithme de signature dans le header. Certaines bibliothèques acceptent "alg": "none" et considèrent le token comme valide sans vérifier aucune signature. L'attaquant forge un token avec les claims de son choix.
Correction : spécifiez explicitement l'algorithme accepté côté serveur. Ne faites jamais confiance au champ alg du token.
Confusion RS256/HS256
Si le serveur utilise RS256 (asymétrique) mais accepte aussi HS256 (symétrique), l'attaquant signe le token avec la clé publique (qui est publique) en utilisant HS256. Le serveur vérifie avec la même clé publique et accepte le token.
Absence d'expiration
Un JWT sans claim exp est valide indéfiniment. Si un token fuite (logs, URL, cache), il reste exploitable pour toujours. Pire : même avec un exp, si le serveur ne le vérifie pas, le token n'expire jamais en pratique.
Correction : durée de vie courte (15 minutes) pour les access tokens, refresh tokens avec rotation et stockage sécurisé.
Secret faible
Un secret HMAC comme secret, password ou le nom de l'entreprise. Des outils comme jwt-cracker testent des dictionnaires de secrets courants en quelques secondes.
OAuth 2.0 : les pièges d'implémentation
PKCE désactivé
OAuth 2.0 avec le flow Authorization Code sans PKCE est vulnérable à l'interception du code d'autorisation. PKCE (Proof Key for Code Exchange) est obligatoire depuis OAuth 2.1 mais beaucoup d'implémentations ne l'activent pas.
Redirect URI lax
Si la validation du redirect_uri est trop permissive (accepte des sous-chemins ou des sous-domaines), un attaquant redirige le code d'autorisation vers une URL qu'il contrôle. https://app.com.evil.com/callback peut passer un filtre qui vérifie juste app.com.
State parameter manquant
Sans le paramètre state, l'application est vulnérable aux attaques CSRF sur le flow OAuth. L'attaquant peut lier son propre compte tiers au compte de la victime.
Scope trop large
L'application demande scope=admin quand elle n'a besoin que de scope=read:profile. Si le token fuite, l'attaquant a des privilèges excessifs.
Sessions classiques : les oublis
Cookies non sécurisés
Un cookie de session sans les flags Secure, HttpOnly et SameSite est vulnérable à l'interception (sans Secure), au vol via XSS (sans HttpOnly), et aux attaques CSRF (sans SameSite).
Invalidation incomplète
L'utilisateur clique sur Déconnexion mais la session côté serveur n'est pas détruite. Le cookie reste valide et utilisable. Encore pire si les sessions n'ont pas de durée de vie maximale.
Fixation de session
L'application ne renouvelle pas l'identifiant de session après l'authentification. L'attaquant fixe un identifiant de session connu, la victime s'authentifie, l'attaquant utilise le même identifiant maintenant authentifié.
Entropie insuffisante
Des identifiants de session prédictibles (basés sur le timestamp, l'ID utilisateur, ou un compteur) permettent à un attaquant de deviner ou brute-forcer des sessions actives.
Recommandations transversales
Parlez-nous de votre revue externe CleanIssue pour auditer votre système d'authentification.
À retenir
Vous éditez un logiciel RH, paie ou recrutement ? CleanIssue réalise des audits de sécurité pour SaaS RH en conditions réelles, sans accès au code. Pour une première lecture de votre exposition, commencez par une revue externe de votre application.
Articles liés
Trois analyses proches pour continuer la lecture sur la meme surface de risque.
n8n CVE-2026-59208 : une faille JWT token exchange qui vous connecte sous l'identité d'un autre
Sur les instances n8n Enterprise qui font confiance à deux émetteurs de tokens externes, le flux de token exchange rapprochait un JWT entrant uniquement sur le claim sub et ignorait iss. Un token valide de l'émetteur A connectait sous l'identité d'un utilisateur de l'émetteur B. CVSS 7.6 (4.0) / 6.8 (3.1). Correctif : n8n 2.27.4 et 2.28.1.
OAuth 2.0 PKCE : quand la protection est désactivée sans le savoir
Le flux PKCE protège contre l'interception de code d'autorisation. Mais quand il est mal implémenté, il donne un faux sentiment de sécurité.
SSO entreprise et SIRH : les pièges SAML et SCIM qui apparaissent en production
L'intégration SSO est le moment où la plupart des SIRH introduisent des failles d'authentification. Les points à relire côté éditeur.
Sources
Services associés
Si ce sujet reflète un risque concret sur votre stack, voici les audits CleanIssue les plus pertinents.