
Preuve de concept en Python démontrant un contournement d'authentification dans pac4j JWT en forgeant un jeton JWE avec un JWT interne non signé, permettant une élévation de privilèges sans clé privée.
Preuve de concept Python pour CVE-2026-29000, un contournement critique de l'authentification affectant les applications utilisant le module JWT pac4j.
La vulnérabilité permet aux attaquants de s'authentifier en tant qu'utilisateurs arbitraires en envoyant un jeton JWE malveillant contenant un PlainJWT non signé (alg: none).
Les applications pac4j peuvent utiliser le flux de jetons suivant :
/api/auth/loginEn raison d'une gestion incorrecte de la logique d'analyse du JWT, lorsque le jeton interne est un PlainJWT (jeton non signé) :
toSignedJWT() renvoie nullCela permet à un attaquant de :
Un attaquant peut :
Aucune clé privée n'est requise — seule la clé publique exposée via JWKS est nécessaire.
Ce dépôt fournit un PoC Python qui :
Python 3.x
Installer les dépendances :
pip install jwcrypto requests
python3 poc.py \
--jwks http://target:8080/api/auth/jwks \
--user admin \
--role ROLE_ADMIN
Exemple de sortie :
=== Jeton JWE malveillant ===
eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMTI4R0NNIiwiY3R5IjoiSldUIn0...
Utilisez-le comme suit :
Authorization: Bearer <TOKEN>
Ce dépôt est fourni uniquement à des fins éducatives et de recherche. N'utilisez pas ce code contre des systèmes sans autorisation appropriée.
Ali Hussainzada Chercheur en sécurité applicative | Chasseur de bugs