
Preuve de concept d'exploitation pour CVE-2026-29000, un contournement d'authentification dans pac4j-jwt via un PlainJWT imbriqué avec alg:none à l'intérieur d'un conteneur JWE.
Ce dépôt contient une preuve de concept (POC) pour une vulnérabilité de contournement d'authentification dans pac4j-jwt (CVE-2026-29000). La vulnérabilité permet à un attaquant de contourner la vérification de signature en imbriquant un PlainJWT (utilisant alg: none) dans un conteneur JWE (JSON Web Encryption).
L'attaque fonctionne en exploitant la volonté du serveur de déchiffrer un JWE chiffré avec sa clé publique, puis de faire confiance au JWT interne sans valider sa signature, à condition qu'il utilise l'algorithme none.
Assurez-vous d'avoir Python 3 installé ainsi que les dépendances requises :
pip install requests jwcrypto
Utilisez exp.py pour récupérer la clé publique de la cible depuis le point de terminaison JWKS, créer un jeton malveillant avec les privilèges ROLE_ADMIN, et l'envelopper dans un JWE.
python3 exp.py <TARGET_URL> --user admin --role ROLE_ADMIN
Exemple :
python3 exp.py http://localhost:8080
Une fois que vous avez le jeton falsifié, utilisez app.py pour interagir avec les points de terminaison API protégés.
python3 app.py <TARGET_URL> <FORGED_TOKEN>
Tester un point de terminaison spécifique :
python3 app.py http://localhost:8080 <FORGED_TOKEN> --endpoint /api/users
exp.py : Le script d'exploitation principal qui récupère les JWKS, crée un PlainJWT et falsifie un JWE.app.py : Un script utilitaire pour tester le jeton falsifié contre les points de terminaison API découverts (/api/dashboard, /api/users, /api/settings).Ce POC est destiné uniquement à des fins éducatives et de tests de sécurité autorisés. L'accès non autorisé à des systèmes informatiques est illégal.