En-tête négligent

Tutoriel de décodage du jeton JWT : Outils, étapes et meilleures pratiques

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.

Tutoriel de décodage des jetons JWT Penligent

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.

Jetons JWT

Outils populaires pour décoder les jetons JWT

OutilLa forceLien
JWT.ioDécodage en temps réel, expériences rapideshttps://jwt.io
Décodeur de SuperTokensUne interface utilisateur propre et conviviale pour les développeurshttps://supertokens.com/jwt-encoder-decoder
Débogueur de jetons Auth0Vérification de niveau entreprisehttps://auth0.com/docs/tokens
PyJWTCLI + bibliothèque Pythonhttps://pyjwt.readthedocs.io
jwt-decode (JS)Décodeur léger côté navigateurhttps://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 :

  1. Changements d'algorithme de RS256 à HS256
  2. Utilise la clé publique du serveur comme secret HMAC
  3. 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.

RS256 → HS256

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 exp ou iat
  • 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 :

  1. décoder JWT
  2. changer "sub" : "501" à "sub" : "1"
  3. re-signer ou contourner la signature
  4. atteindre le point de terminaison privilégié
  5. 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 sous réclamer
  • escalade des privilèges par l'intermédiaire d'un faux rôle champs

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

AttaqueDescriptionExempleDéfense
alg : aucunSupprime la signatureChamp de signature videRejeter les JWT non signés
RS→HS ConfusionClé publique utilisée comme secret HMACJeton d'administration falsifiéAppliquer l'algorithme
Secret faibleLa force brute HS256"password123" secretClé aléatoire de 32 octets
Réclamations falsifiéesModifier le rôle/sous-rôle"rôle "adminAutorisation côté serveur
Vol XSSJS vole JWTlocalStorage.tokenHttpOnly cookies
Replay AttackJeton de réutilisationApplications mobilesTTL court, rotation
Fuite de jetons internesUsurpation d'identité de serviceMicroservicesmTLS, 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.

Partager l'article :
Articles connexes
fr_FRFrench