Guía de despliegue

Keycloak v26.7.4: 6 CVEs — migrar a Authelia o ZITADEL

Desplegar en un VPS Cloud →

Tutorial

Keycloak v26.7.4: 6 CVEs — migrar a Authelia o ZITADEL

Seguridad y monitorización12 min de lectura10 pasos

El 16 de septiembre de 2026, el equipo de Keycloak publicó la versión 26.7.4 con un boletín inusual: seis CVEs corregidas en una sola entrega, dos de las cuales permiten a cualquier anónimo en Internet tumbar el servidor sin credenciales. Si gestionas el SSO de menos de diez aplicaciones en un VPS, esta señal merece una pausa: ¿sigue siendo Keycloak la herramienta adecuada? Esta guía repasa las seis vulnerabilidades, compara las alternativas ligeras Authelia y ZITADEL, y propone un camino de migración concreto manteniendo Keycloak en paralelo.

Contenido· Keycloak v26.7.4 — por qué 6 CVEs en una semana cambian el panorama1/10
  1. 01Keycloak v26.7.4 — por qué 6 CVEs en una semana cambian el panorama
  2. 02Qué podría haber permitido cada CVE — resumen no técnico
  3. 03Keycloak vs Authelia vs ZITADEL — elegir según tu contexto VPS
  4. 04Authelia — SSO ligero para menos de 10 aplicaciones
  5. 05Migrar de Keycloak a Authelia — exportar OIDC, configurar, testear
  6. 06ZITADEL — IdP API-first para equipos de desarrollo
  7. 07Migrar de Keycloak a ZITADEL — procedimiento en VPS
  8. 08Mantener Keycloak en paralelo durante la migración — la estrategia de corte limpio
  9. 09Errores comunes durante la migración SSO
  10. 10Tras la migración — probar la autenticación de cada aplicación

Keycloak v26.7.4 — por qué 6 CVEs en una semana cambian el panorama

Las notas de la versión 26.7.4 se publicaron el 16 de septiembre de 2026, una semana después de la 26.7.3 que ya había cerrado varios agujeros. Este ritmo revela menos un bug aislado que una deuda estructural en la superficie de exposición de Keycloak: el proyecto soporta docenas de protocolos (OIDC, SAML, LDAP, Kerberos), una interfaz de administración completa y un motor de temas del lado del servidor. Cada capa tiene su propia superficie de red.

Las dos vulnerabilidades más graves (CVE-2026-79651, CVSS 7.5, y CVE-2026-18212, CVSS 7.5) son especialmente emblemáticas: permiten a un atacante no autenticado agotar la memoria del proceso Keycloak golpeando endpoints accesibles públicamente — la página de login y los endpoints SAML — sin ninguna cuenta. En un VPS con 2 a 4 GB de RAM compartidos entre varios servicios, ese vector puede tumbar toda la stack.

Otra señal: la versión 26.7.1, publicada pocas semanas antes, ya había introducido regresiones de seguridad que la 26.7.4 solo corrige parcialmente (CVE-2026-74909 está documentada explícitamente como «corrección incompleta» de la 26.7.1). Dos ciclos de parche en menos de un mes en versiones menores consecutivas es una señal de que el código superficial está bajo presión.

Qué podría haber permitido cada CVE — resumen no técnico

  • CVE-2026-79651 (CVSS 7.5 — alta): Keycloak acepta etiquetas de locale arbitrarias en los endpoints de temas sin limitarlas ni validarlas. Un atacante envía locales únicos en bucle desde la red pública; cada solicitud asigna memoria que nunca se libera. Resultado: fallo del proceso por agotamiento de memoria, sin necesidad de credencial alguna.
  • CVE-2026-18212 (CVSS 7.5 — alta): los helpers SAML Redirect DEFLATE filtran el estado nativo de la biblioteca zlib. Una solicitud SAML malformada basta para desencadenar corrupción de memoria que puede llevar al fallo del servidor o a una fuga de datos de sesión.
  • CVE-2026-74909 (CVSS 8.1 — alta): un punto y coma codificado en porcentaje (%3B) elude la limpieza de parámetros matrix en PathMatcher. Un atacante puede acceder a un recurso protegido por una política más estricta usando la forma menos restrictiva de la misma ruta.
  • CVE-2026-90997 (CVSS 7.4 — alta): en despliegues sobre MySQL o MariaDB, el número predeterminado de filas que devuelve el motor de almacenamiento hace que las compuertas anti-replay sean ineficaces. Un artefacto de autenticación ya utilizado puede reutilizarse.
  • CVE-2026-17526 (CVSS 7.2 — alta): el rol impersonation puede suplantar la identidad de un administrador de realm. Un operador con permisos limitados puede elevar sus privilegios hasta la administración completa del realm.
  • CVE-2026-19607 (CVSS 5.3 — media): una colisión de nombre de usuario en el flujo de federación de identidad (broker) bloquea la cuenta del usuario legítimo. El usuario legítimo queda expulsado de su propia cuenta sin ninguna acción por su parte.

Keycloak vs Authelia vs ZITADEL — elegir según tu contexto VPS

Desplace la tabla

CriterioKeycloak 26.7.4Authelia 4.xZITADEL 2.x
RAM en reposo512 MB – 1 GB (JVM)< 30 MB (Go)150 – 300 MB (Go + CockroachDB o PostgreSQL)
Lenguaje / runtimeJava (JVM)Go — binario únicoGo — binario único
LicenciaApache 2.0Apache 2.0Apache 2.0 (núcleo)
ProtocolosOIDC, SAML, LDAP, Kerberos, WebAuthnOIDC, 2FA (TOTP, WebAuthn)OIDC, OAuth2, SAML, LDAP, WebAuthn
Interfaz de administraciónCompleta — realms, clients, flujosSolo YAMLConsola web + API gRPC/REST
Ideal para> 20 apps, federación LDAP, SAML enterprise< 10 apps, proxy auth, equipo técnico< 20 apps, equipo dev, API-first
Mantenibilidad en VPSPesada: JVM, config XML, migracionesLigera: 1 archivo YAML, 1 binarioMedia: base de datos requerida, pero API limpia
Superficie CVE (historial)Alta: 6 CVEs en v26.7.4 solaBaja: < 5 CVEs desde 2022Baja a media: proyecto más joven

Authelia — SSO ligero para menos de 10 aplicaciones

Authelia es un servidor de autenticación y autorización escrito en Go. Expone un endpoint de validación HTTP que tu reverse proxy (nginx, Traefik, Caddy) puede consultar para proteger aplicaciones sin que estas necesiten implementar OIDC por sí mismas. También soporta el flujo OIDC completo para las aplicaciones que lo requieran.

Su huella de memoria es su principal fortaleza operacional: en reposo, Authelia consume entre 20 y 30 MB de RAM según las mediciones publicadas en los issues de GitHub del proyecto (discusiones #5939 y #6048). En un VPS de 2 GB compartido entre Nextcloud, un servidor de correo y un reverse proxy, esto es insignificante comparado con el mínimo de 512 MB de la JVM de Keycloak antes de cualquier carga.

La configuración es completamente declarativa (YAML). No hay interfaz gráfica de administración — una ventaja para la seguridad (ningún endpoint de admin expuesto) y un inconveniente para equipos no técnicos. Para un desarrollador en solitario o un equipo pequeño que gestiona sus propias aplicaciones en VPS, Authelia suele ser la elección correcta.

Migrar de Keycloak a Authelia — exportar OIDC, configurar, testear

  1. Exportar la configuración OIDC de Keycloak

    En la consola de administración de Keycloak, ve a Realm Settings → Export. Marca «Export clients» y «Export groups». Descarga el JSON resultante — contiene tus clientes OIDC con sus redirect URIs y scopes. Este archivo sirve de referencia para reconfigurar cada aplicación en Authelia; no se importa directamente.

  2. Instalar Authelia con Docker Compose

    Crea un docker-compose.yml mínimo:

    services:
    authelia:
    image: authelia/authelia:latest
    volumes:
    - ./config:/config
    ports:
    - 9091:9091
    restart: unless-stopped

    Crea el directorio config/ y coloca configuration.yml en él. La documentación oficial proporciona un esqueleto completo en https://www.authelia.com/configuration/prologue/introduction/.

  3. Configurar los clientes OIDC en Authelia

    Para cada aplicación migrada desde Keycloak, añade una entrada bajo identity_providers.oidc.clients en configuration.yml:

    identity_providers:
    oidc:
    clients:
    - id: mi-app
    secret: '$pbkdf2-sha512$...'
    redirect_uris:
    - https://mi-app.ejemplo.com/oauth/callback
    scopes: [openid, email, profile]

    Genera el secreto con authelia crypto hash generate pbkdf2 --variant sha512. Usa el JSON exportado de Keycloak para encontrar las redirect URIs de cada cliente.

  4. Configurar el reverse proxy para que consulte Authelia

    Authelia funciona como middleware de validación. En nginx, añade un bloque auth_request:

    location /authelia {
    internal;
    proxy_pass http://authelia:9091/api/authz/forward-auth;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {
    auth_request /authelia;
    proxy_pass http://mi-app:3000;
    }

    Para las aplicaciones que usan OIDC de forma nativa, apunta el issuer a https://auth.tu-dominio.com.

  5. Probar cada aplicación antes de desconectar Keycloak

    Para cada aplicación migrada, verifica tres flujos: inicio de sesión inicial (redirección a Authelia → autenticación → vuelta a la app), logout (cookie de Authelia y sesión de la app invalidadas), y segundo factor si está activado. No desconectes Keycloak hasta que todos los flujos de todas las aplicaciones estén validados en Authelia. Mantén el contenedor Keycloak detenido pero no eliminado durante 30 días para poder hacer rollback.

ZITADEL — IdP API-first para equipos de desarrollo

ZITADEL es un Identity Provider escrito en Go, con licencia Apache 2.0, publicado por el equipo suizo ZITADEL Cloud. Su repositorio oficial es github.com/zitadel/zitadel. Mientras que Authelia está diseñado como middleware de proxy, ZITADEL es un IdP completo con una API gRPC/REST de primera clase — construido para organizaciones que crean aplicaciones, no solo las protegen.

La huella de memoria es superior a Authelia porque ZITADEL requiere una base de datos (PostgreSQL o CockroachDB), pero se mantiene en el rango de 150 a 300 MB bajo carga normal — muy por debajo del mínimo de 512 MB de la JVM de Keycloak. El proyecto soporta OIDC, OAuth2, SAML 2.0, LDAP de solo lectura y WebAuthn.

ZITADEL es especialmente adecuado para equipos de desarrollo que construyen aplicaciones SaaS y necesitan gestionar organizaciones y usuarios programáticamente via API, sin pasar por una GUI para cada operación. La consola web está disponible pero la API es el camino principal.

Migrar de Keycloak a ZITADEL — procedimiento en VPS

  1. Desplegar ZITADEL con Docker Compose

    ZITADEL proporciona un docker-compose.yml oficial en su repositorio de GitHub (directorio e2e/). La configuración mínima requiere PostgreSQL (o CockroachDB) y un ZITADEL_MASTERKEY de 32 caracteres:

    ZITADEL_MASTERKEY=$(openssl rand -base64 32)

    Consulta la documentación oficial en https://zitadel.com/docs/self-hosting/deploy/compose para el archivo completo y las variables de entorno requeridas.

  2. Crear aplicaciones OIDC en ZITADEL

    En la consola de ZITADEL (https://tu-instancia:8080), crea una Organización y luego un Proyecto. Dentro de ese proyecto, crea una Aplicación de tipo «Web» o «User Agent» según tu caso de uso.

    ZITADEL genera un Client ID y un Client Secret. Configura las Redirect URIs usando el JSON exportado de Keycloak como referencia. El endpoint de Discovery está en https://tu-instancia:8080/.well-known/openid-configuration.

  3. Migrar usuarios desde Keycloak

    Keycloak puede exportar usuarios de un realm como JSON desde la consola (Realm Settings → Export → marcar «Export users»). Las contraseñas hasheadas no se pueden importar directamente en ZITADEL — los algoritmos de hash difieren.

    Dos enfoques: (1) importar metadatos de usuario vía la API de ZITADEL (POST /management/v1/users/human/_import) con restablecimiento de contraseña obligatorio al primer inicio de sesión, o (2) migración progresiva vía login social/OIDC (ZITADEL consume Keycloak como IdP externo durante la transición). El enfoque (2) evita pedir a todos los usuarios que restablezcan su contraseña el mismo día.

  4. Actualizar tus aplicaciones para apuntar a ZITADEL

    Actualiza las variables de entorno de cada aplicación:

    OIDC_ISSUER=https://tu-instancia:8080
    OIDC_CLIENT_ID=<zitadel-client-id>
    OIDC_CLIENT_SECRET=<zitadel-client-secret>

    El endpoint de Discovery permite a la mayoría de las bibliotecas OIDC auto-configurarse. Prueba cada aplicación con una cuenta de prueba antes de cambiar el tráfico de producción.

  5. Validar los flujos SSO y deshabilitar Keycloak

    Verifica login, logout, refresco de token y segundo factor en cada aplicación. En ZITADEL, la pestaña «Sessions» de la consola te permite ver las sesiones activas en tiempo real e invalidarlas si es necesario.

    Mantén el contenedor Keycloak detenido pero no eliminado durante 30 días. Elimínalo tras este período de retención.

Mantener Keycloak en paralelo durante la migración — la estrategia de corte limpio

La objeción clásica a migrar un IdP es válida: todas tus aplicaciones comparten el mismo proveedor de identidad. Si la migración falla a mitad de camino, nadie puede iniciar sesión.

La estrategia recomendada es mantener Keycloak operativo durante toda la migración y cambiar las aplicaciones una a una. Varios mecanismos facilitan esto:

DNS por aplicación: cada aplicación apunta a un IdP mediante una variable de entorno. Cambia OIDC_ISSUER de una aplicación a la vez, prueba, y pasa a la siguiente. Keycloak sigue sirviendo a las aplicaciones no migradas aún.

Sesiones independientes: OIDC crea sesiones de aplicación independientes. Una aplicación migrada a Authelia o ZITADEL no invalida las sesiones activas de las aplicaciones que siguen en Keycloak.

Horizonte de 30 días: la mayoría de las migraciones de menos de 10 aplicaciones requieren de 2 a 5 días de trabajo técnico. Planifica una semana, valida durante 30 días, luego corta. El docker compose stop keycloak es reversible en 30 segundos.

Errores comunes durante la migración SSO

Cuatro trampas aparecen sistemáticamente en las migraciones de Keycloak hacia alternativas ligeras.

Olvidar las redirect URIs: Keycloak valida las redirect URIs de forma exacta por defecto. Authelia y ZITADEL hacen lo mismo. Si tu aplicación envía https://app.ejemplo.com/callback pero la configuración del IdP declara https://app.ejemplo.com/oauth/callback, la autenticación falla con un error redirect_uri_mismatch. Verifica cada URI en el JSON exportado de Keycloak.

Los scopes y claims no son idénticos: Keycloak puede configurarse para devolver claims personalizados (roles, atributos de usuario) que consumen tus aplicaciones. Authelia devuelve por defecto solo openid, profile y email. Si tu aplicación depende de un claim roles o groups, verifica que el IdP de destino puede producirlo antes de desconectar Keycloak.

La sesión del IdP y la sesión de la aplicación son distintas: un logout del IdP no desconecta automáticamente la aplicación si esta no implementa back-channel logout. Los usuarios pueden seguir conectados a una aplicación tras haberse desconectado del IdP. Prueba explícitamente el flujo de logout completo.

El clock skew invalida los tokens: los tokens OIDC tienen una ventana de validez corta (típicamente 5 a 15 minutos). Si el reloj de tu VPS se desvía más de unas pocas decenas de segundos, los tokens expiran antes de ser usados. Verifica que chrony o systemd-timesyncd está activo en tu VPS con timedatectl status.

Tras la migración — probar la autenticación de cada aplicación

Una migración SSO no está completa cuando funciona el primer inicio de sesión. Esta es la lista de validación mínima a aplicar a cada aplicación.

Login inicial: abre una sesión de navegación privada (sin cookies existentes) e inicia sesión. La redirección al IdP debe funcionar, la autenticación debe completarse y el retorno a la aplicación debe aterrizar en la página correcta.

Refresh token: espera la expiración del access token y verifica que la aplicación lo refresca silenciosamente sin forzar un nuevo inicio de sesión.

Logout: desconéctate desde la aplicación y verifica que la sesión queda invalidada en el lado del IdP (Authelia: cookie authelia_session ausente; ZITADEL: sesión ausente de la consola). Intenta acceder a un recurso protegido después del logout — debes ser redirigido a la página de inicio de sesión.

Segundo factor: si 2FA está activado, prueba TOTP y WebAuthn por separado. Las sesiones WebAuthn están vinculadas al dominio — una migración simultánea de dominio invalidaría todas las passkeys existentes.

Acceso no autorizado: intenta acceder a un recurso protegido sin token válido y verifica que la respuesta es un 401 o una redirección al IdP, no un 500 o una página de aplicación sin datos.

Authelia o ZITADEL desplegados en tu VPS en minutos

ServOrbit ofrece Authelia como aplicación marketplace. Despliega SSO ligero en tu VPS sin configuración manual de Docker Compose.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva