Keycloak 26.7.4: 6 CVEs, 5 con CVSS ≥ 7, y el fin del pico de CPU de 26.6.2

Keycloak 26.7.4: 6 CVEs, 5 con CVSS ≥ 7, y el fin del pico de CPU de 26.6.2

· Security · IDPTrust

Keycloak 26.7.4 se publicó el 16 de septiembre de 2026. Son solo 6 CVEs, frente a los 20 de 26.7.3, pero no te fíes de la cifra: cinco tienen una puntuación CVSS de 7 o más. Hay un bypass de autorización, dos denegaciones de servicio que no necesitan autenticación, un fallo que permite reutilizar DPoP, aserciones JWT y códigos TOTP, y una escalada que convierte el rol impersonation en control total del realm.

La release corrige además el bucle de CPU que arrastran muchos clústeres desde 26.6.2. Es el bug que ha llenado el tracker de Keycloak de reportes de producción durante todo el verano.

Esta guía recoge los 6 CVEs de Keycloak 26.7.4 ordenados por gravedad, qué hacer mientras no puedas actualizar y en qué orden priorizar la actualización.

Respuesta rápida: ¿qué corrige Keycloak 26.7.4?

Keycloak 26.7.4 corrige 6 CVEs, incluye una mejora (Quarkus 3.33.3.2) y resuelve varios bugs. La vulnerabilidad más grave es CVE-2026-74909 (CVSS 8.1), una corrección incompleta del bypass del PathMatcher que 26.7.1 ya intentó cerrar: un punto y coma codificado (%3B) sigue engañando al policy enforcer. Le siguen dos DoS sin autenticación con CVSS 7.5 (caché de locales sin límite y fuga de memoria nativa en SAML), un bypass de la protección anti-replay en modo stateless con MySQL/MariaDB (7.4) y la impersonación de administradores del realm (7.2). Se recomienda actualizar cuanto antes, sobre todo si expones Keycloak a internet, usas SAML o tienes aplicaciones protegidas con el policy enforcer.

Tabla de CVEs corregidos en Keycloak 26.7.4

CVE CVSS Severidad Componente ¿Autenticación?
CVE-2026-74909 8.1 Alta Authorization Services (PathMatcher) Sí (usuario)
CVE-2026-79651 7.5 Alta Localización de temas No
CVE-2026-18212 7.5 Alta SAML Redirect Binding No
CVE-2026-90997 7.4 Alta Modo stateless (MySQL/MariaDB) No
CVE-2026-17526 7.2 Alta Impersonación Sí (rol impersonation)
CVE-2026-19607 5.3 Media First broker login No

Las puntuaciones proceden de los registros de NVD aportados por Red Hat y, en el caso de CVE-2026-90997, del advisory de GitHub GHSA-xpwp-2pcm-8xq3. Las notas de versión no incluyen puntuaciones. Hay un matiz: el issue de Keycloak etiqueta CVE-2026-18212 como severidad media, aunque su CVSS es 7.5. A 17 de septiembre, GitHub solo ha publicado el advisory de CVE-2026-90997. Con Keycloak 26.7.1 los advisories llegaron un día después de las notas, así que conviene volver a revisar la página de advisories en los próximos días.


Las vulnerabilidades más graves de Keycloak 26.7.4

CVE-2026-74909 (CVSS 8.1): el bypass del PathMatcher vuelve con un punto y coma codificado

En Keycloak 26.7.1 se corrigió CVE-2026-15573 (CVSS 8.1). El PathMatcher de Authorization Services no normalizaba las URIs, y bastaba una barra final o un parámetro de matriz (;foo) para que el policy enforcer aplicara una política menos restrictiva de la prevista.

La corrección eliminaba los parámetros de matriz, pero solo cuando el punto y coma venía literal. Si llega codificado como %3B, el recorte no se aplica y el bypass vuelve a funcionar. NVD añade que también afecta a los segmentos de directorio codificados. Un usuario autenticado puede llegar a endpoints administrativos o privados de la aplicación protegida que su política no le permite ver.

Si protegiste tus aplicaciones con el policy enforcer y en agosto diste este problema por cerrado, vuelve a abrirlo. Actualizar el servidor es el primer paso. Si tus aplicaciones embeben el policy enforcer como librería, comprueba también qué versión llevan, porque la comparación de rutas se hace dentro de la aplicación. Mientras tanto, rechazar en el proxy inverso las rutas que contengan %3B, %2F o %2E%2E es un control compensatorio barato.

CVE-2026-79651 y CVE-2026-18212 (CVSS 7.5): dos formas de tumbar Keycloak sin autenticarse

Estas son las dos vulnerabilidades más fáciles de explotar de la release. Las dos se lanzan contra endpoints públicos y no requieren credenciales.

CVE-2026-79651: caché de locales sin límite. Los endpoints de localización de temas aceptan cualquier etiqueta de idioma que llegue en la petición y la guardan en una caché en memoria permanente y sin tamaño máximo. Si un atacante envía miles de etiquetas distintas, la heap crece hasta que el proceso cae por falta de memoria. No hace falta más que un script en bucle.

CVE-2026-18212: fuga de memoria nativa en SAML Redirect. Los helpers de compresión DEFLATE del binding SAML Redirect nunca llaman a end() sobre sus Deflater e Inflater. Esa memoria la reserva zlib fuera de la heap de Java, así que el recolector de basura nunca la libera. Con peticiones SAML malformadas repetidas, el RSS del proceso crece hasta que el sistema operativo o Kubernetes lo matan.

El segundo tiene una trampa operativa. Tus métricas de heap de la JVM no lo van a detectar, porque la heap se mantiene estable mientras el contenedor se queda sin memoria. Si has visto reinicios por OOMKilled en pods de Keycloak con la heap tranquila, revisa esto. Y aunque no uses SAML en tus clientes, el endpoint sigue expuesto en cada realm.

Hasta que actualices, conviene limitar en el proxy la tasa de peticiones al endpoint SAML y a los endpoints de temas, y vigilar la memoria del contenedor, no solo la de la JVM.

CVE-2026-90997 (CVSS 7.4): replay de DPoP, aserciones JWT y TOTP en modo stateless

Esta afecta solo a despliegues que usan el modo stateless con MySQL o MariaDB, y solo a las versiones 26.7.0 a 26.7.3. Si esa es tu combinación, es tu prioridad número uno.

Keycloak impide reutilizar los artefactos de un solo uso guardando cada uso en base de datos y comprobando cuántas filas se modificaron. El driver de MySQL/MariaDB, con su configuración por defecto, cuenta como afectada una fila que ha encontrado aunque no la haya cambiado. Keycloak interpreta esa respuesta como un primer uso y acepta todos los replays.

Los artefactos afectados son:

  • Aserciones JWT de cliente (private_key_jwt), con las que se accede al token endpoint haciéndose pasar por el cliente.
  • Pruebas DPoP, que dejan de proteger nada si se pueden repetir.
  • Códigos TOTP no reutilizables, que vuelven a servir durante su ventana de validez.

Un atacante que intercepte uno de estos artefactos puede repetirlo para obtener tokens o completar un login. La revocación de tokens no está afectada. Según el advisory, el workaround es desactivar la feature stateless hasta que puedas actualizar.

CVE-2026-17526 (CVSS 7.2): el rol impersonation puede impersonar a un administrador del realm

El rol impersonation de realm-management se suele dar a los equipos de soporte para que vean la aplicación "como el usuario" y reproduzcan incidencias. Nadie lo trata como un rol de administración, y ese es el problema.

Hasta 26.7.3, quien tenga ese rol puede impersonar a un administrador del realm y, con ello, obtener control total: usuarios, clientes, roles y configuración. La puntuación exige privilegios altos (PR:H), pero en la práctica el rol está repartido entre mucha más gente que realm-admin.

Hasta que actualices, revisa quién tiene impersonation, directamente o a través de grupos y roles compuestos, y retíralo a quien no lo necesite a diario. Revisa también los eventos de administración en busca de impersonaciones de cuentas privilegiadas. Ya vimos otra variante de este patrón, la del rol que da más de lo que parece, en la escalada de privilegios en la consola de administración con FGAP v2.

¿No tienes claro quién puede impersonar a quién en tus realms? Auditamos roles y permisos de administración en Keycloak como parte de nuestros servicios de soporte.

CVE-2026-19607 (CVSS 5.3): bloqueo de cuentas por colisión de username en first broker login

En el flujo de first broker login, un atacante puede registrar en un proveedor de identidad externo un nombre de usuario que coincida con el de una cuenta legítima de Keycloak. La colisión que se provoca deja al usuario real sin poder acceder a su cuenta.

No hay robo de cuenta, solo denegación de servicio dirigida a usuarios concretos. Si aceptas logins desde IdPs sociales o desde cualquier proveedor donde el atacante pueda elegir su nombre de usuario, revisa cómo mapeas el username en tus brokers. Construirlo a partir del alias del proveedor más el identificador externo evita colisiones con cuentas locales.


El pico de CPU de 26.6.2 por fin está corregido

Mucha gente va a actualizar por este bug aunque no le preocupen los CVEs.

Desde 26.6.2, muchos clústeres muestran este patrón (issue #49635): un nodo funciona con normalidad y, en un momento cualquiera y sin carga especial, se queda con la CPU fija en un bucle que no se va hasta reiniciar el pod. Los reportes vienen de clústeres de 3 nodos y de despliegues de 15 pods con cientos de peticiones por segundo. El origen está en un bug de streaming HTTP de Quarkus.

26.7.4 incluye una corrección específica para las ramas 26.6 y 26.7, junto con la actualización a Quarkus 3.33.3.2. Si no puedes actualizar todavía, el workaround que la comunidad ha confirmado en el issue es activar el buffering de peticiones en el balanceador. En HAProxy es option http-buffer-request.

No confundas este problema con la regresión de la Admin API que introdujo 26.7.1 y que escalaba con el número de realms. Esa ya se corrigió en 26.7.3. Si tienes muchos realms en una sola instancia, las dos te afectan. Explicamos por qué el número de realms es una decisión de arquitectura en nuestra guía de estrategia de realms.

Otras correcciones destacables de 26.7.4:

  • Oracle 19 con el driver OCI completo no arrancaba desde 26.6.0 (SQLFeatureNotSupportedException en setNetworkTimeout), por el nuevo timeout de socket en las conexiones a base de datos.
  • RealmAdapter.isUserManagedAccessAllowed() en caché devolvía el valor de isEnabled(). Tras actualizar un realm, User-Managed Access podía aparecer activado sin estarlo, o al revés.
  • El atributo calculado realm_client se guardaba en los atributos del cliente al hacer save desde la Admin API.
  • La consola de administración lanzaba una excepción al hacer clic en un subgrupo.

¿Desde qué versión vienes? Los CVEs que arrastras

Keycloak solo parchea la última minor, así que cada release de la rama 26.7 se suma a las anteriores:

  • Desde 26.7.3: 6 CVEs, los de esta release.
  • Desde 26.7.2: 26 CVEs, porque 26.7.3 corrigió 20, entre ellos dos bypass de token exchange con los IdP de Google y Microsoft y la falta de verificación de host en LDAPS.
  • Desde 26.7.1: 34 CVEs. 26.7.2 añadió 8, entre ellos CVE-2026-18963 (CVSS 9.1), un robo de cuenta sin autenticación a través del flujo de reset-credentials.
  • Desde 26.7.0: 46 CVEs, con las dos escaladas a administrador del realm vía Dynamic Client Registration (hasta CVSS 8.8) que corrigió 26.7.1.

En todos los casos, ve directo a 26.7.4. No hace falta pasar por las versiones intermedias.


Cómo actualizar a Keycloak 26.7.4

Revisa primero la guía oficial de migración. Si vienes de cualquier 26.7.x, es una actualización de parche. Si vienes de 26.6.x o de una versión anterior, asumes también la migración de 26.7.0.

Orden práctico de trabajo:

  1. Haz una copia de la base de datos y confirma tu plan de vuelta atrás.
  2. Si usas modo stateless con MySQL/MariaDB y no puedes actualizar hoy, desactiva la feature stateless como medida temporal.
  3. Revisa quién tiene el rol impersonation en cada realm y retíralo donde no sea imprescindible. Busca en los eventos de administración impersonaciones de cuentas privilegiadas.
  4. Actualiza primero un entorno que no sea de producción y prueba de extremo a extremo los flujos de login federado, SAML y cualquier aplicación protegida con el policy enforcer.
  5. Si tus aplicaciones embeben el policy enforcer, revisa también la versión de esa librería.
  6. Después de actualizar, vigila la CPU y la memoria del contenedor (no solo la heap) de todos los nodos. Si el bucle de CPU de 26.6.2 te afectaba, la diferencia se nota en horas.

¿Deberías actualizar a Keycloak 26.7.4?

Sí, y no lo dejes para la próxima ventana trimestral. Cinco CVEs con CVSS de 7 o más, dos de ellos explotables sin credenciales, justifican una ventana de mantenimiento cercana.

Orden de prioridad:

  1. Modo stateless con MySQL/MariaDB. CVE-2026-90997 anula la protección anti-replay de DPoP, private_key_jwt y TOTP. Actualiza o desactiva la feature stateless hoy.
  2. Keycloak expuesto a internet. CVE-2026-79651 y CVE-2026-18212 permiten a cualquiera tumbar tus nodos. Pon límites de tasa en el proxy mientras actualizas.
  3. Aplicaciones protegidas con el policy enforcer. CVE-2026-74909 reabre un bypass de autorización de CVSS 8.1 que creías cerrado.
  4. El rol impersonation repartido entre equipos de soporte. CVE-2026-17526 convierte ese rol en administración total del realm.
  5. Todavía en 26.7.0, 26.7.1 o 26.7.2. Arrastras entre 26 y 46 CVEs, incluido un robo de cuenta sin autenticación con CVSS 9.1.
  6. Nodos con picos de CPU inexplicables desde 26.6.2. No es un CVE, pero lo estás pagando en infraestructura y en incidencias.

Preguntas frecuentes sobre Keycloak 26.7.4

¿Cuántos CVEs corrige Keycloak 26.7.4?

Keycloak 26.7.4 corrige 6 CVEs: CVE-2026-74909, CVE-2026-79651, CVE-2026-18212, CVE-2026-90997, CVE-2026-17526 y CVE-2026-19607. Cinco tienen una puntuación CVSS de 7.0 o superior.

¿Cuál es la vulnerabilidad más grave de Keycloak 26.7.4?

CVE-2026-74909 (CVSS 8.1), una corrección incompleta del bypass del PathMatcher (CVE-2026-15573, corregido en 26.7.1). Un punto y coma codificado como %3B evita el recorte de parámetros de matriz y permite a un usuario autenticado saltarse las políticas del policy enforcer de Authorization Services.

¿Hay vulnerabilidades explotables sin autenticación en Keycloak 26.7.4?

Sí. CVE-2026-79651 (caché de locales sin límite) y CVE-2026-18212 (fuga de memoria nativa en SAML Redirect) permiten una denegación de servicio sin credenciales, ambas con CVSS 7.5. CVE-2026-90997 tampoco requiere autenticación, pero el atacante necesita interceptar antes un artefacto de un solo uso y solo afecta al modo stateless con MySQL o MariaDB.

¿Corrige Keycloak 26.7.4 el problema de CPU alta de 26.6.2?

Sí. 26.7.4 incluye una corrección específica para el bucle de CPU del issue #49635, que aparece desde 26.6.2 y tiene su origen en un bug de streaming HTTP de Quarkus, y actualiza a Quarkus 3.33.3.2. Si no puedes actualizar aún, activar el buffering de peticiones en el balanceador (option http-buffer-request en HAProxy) evita el problema.


Notas de publicación completas: keycloak.org/2026/09/keycloak-2674-released

Advisories de seguridad: github.com/keycloak/keycloak/security/advisories


Ayuda con esta actualización

Seis CVEs, dos de ellos explotables por cualquiera desde internet, un rol de soporte que resulta ser de administración y un bug de CPU que lleva meses en producción. Y esto es solo la cuarta release de parches de la rama 26.7. Mantener Keycloak al día ya no es algo que se haga una vez al año.

En IDPTrust operamos Keycloak en producción todos los días. Evaluamos el impacto de cada release sobre tu configuración, aplicamos los controles compensatorios mientras llega la ventana, planificamos la actualización con plan de vuelta atrás y te acompañamos durante el cambio.

Habla con nuestro equipo de soporte Keycloak y deja de ir detrás de cada release.