Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

JWT Security

devsecops

Définition

JWT (JSON Web Token) Security couvre les pratiques de sécurisation de l'utilisation des JSON Web Tokens, un standard ouvert (RFC 7519) largement utilisé pour l'authentification et l'autorisation dans les APIs REST et les architectures microservices. Bien que le format JWT soit bien défini, son implémentation présente de nombreux pièges de sécurité qui ont conduit à des vulnérabilités critiques dans des centaines d'applications. Un JWT est composé de trois parties encodées en Base64URL séparées par des points : le Header (algorithme de signature et type), le Payload (claims : identité de l'utilisateur, rôles, expiration), et la Signature. La validité d'un JWT repose sur la vérification de sa signature par le serveur, garantissant que le token n'a pas été modifié depuis son émission. Les vulnérabilités classiques des implémentations JWT sont bien documentées. L'attaque "algorithm confusion" (CVE-2015-9235) exploite la possibilité de spécifier "alg: none" dans le header JWT, contournant la vérification de signature sur des bibliothèques vulnérables. L'attaque RS256 to HS256 (algorithm confusion) trompe un serveur utilisant RS256 en lui soumettant un JWT signé avec HS256 en utilisant la clé publique RSA comme secret HMAC. La faiblesse des secrets HMAC (HS256 avec des secrets courts ou prévisibles) permet des attaques par force brute (hashcat peut casser des secrets JWT HS256 faibles en quelques heures). D'autres vulnérabilités incluent : l'absence de vérification de l'expiration (claim "exp"), l'absence de vérification de l'audience (claim "aud") permettant la réutilisation de tokens entre services, les claims sensibles en clair dans le payload (les JWTs sont encodés, pas chiffrés — n'importe qui peut lire le payload sans la clé), la mauvaise gestion de la révocation (les JWTs sont stateless, il n'est pas possible de les invalider sans mécanisme supplémentaire comme une blacklist ou un versioning). Les bonnes pratiques JWT incluent : utiliser RS256 ou ES256 (asymétriques) plutôt que HS256 pour les architectures multi-services, des secrets HS256 d'au moins 256 bits générés aléatoirement, des durées d'expiration courtes (15 minutes à 1 heure), la vérification de tous les claims (exp, iss, aud, nbf), et un mécanisme de rotation/révocation via des refresh tokens.

Vulnérabilités classiques JWT à éviter

Les pièges JWT les plus courants : 1) alg:none bypass (certaines bibliothèques acceptent des tokens non signés si l'algorithme est "none") — toujours valider que l'algorithme est celui attendu. 2) Algorithm confusion RS256→HS256 (signer un token avec la clé publique RSA en HMAC) — ne jamais accepter plusieurs algorithmes. 3) Secret HS256 faible (brute-forceable avec hashcat) — minimum 256 bits aléatoires. 4) Absence de vérification de l'expiration (exp) et de l'audience (aud) — toujours vérifier tous les claims.

Architecture JWT sécurisée pour les microservices

Pour les architectures microservices, RS256 ou ES256 (signatures asymétriques) permettent à chaque service de vérifier les tokens sans partager un secret. Le service d'authentification signe avec la clé privée, les autres services vérifient avec la clé publique exposée via un JWKS endpoint (/.well-known/jwks.json). La rotation des clés doit être planifiée avec une période de transition (double-publication des clés ancienne et nouvelle) pour éviter les interruptions.

Révocation et refresh tokens

Les JWTs étant stateless, leur révocation immédiate nécessite des mécanismes supplémentaires : une blacklist de JTI (JWT ID) dans Redis pour les tokens révoqués, un versioning de token dans le profil utilisateur (token_version), ou des access tokens à courte durée de vie (5-15 min) avec refresh tokens à longue durée (7-30 jours) révocables côté serveur. La déconnexion invalide le refresh token mais l'access token reste valide jusqu'à son expiration naturelle.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis