Guide de déploiement

Keycloak v26.7.4 : 6 CVEs — migrer vers Authelia ou ZITADEL

Déployer sur un VPS Cloud →

Tutoriel

Keycloak v26.7.4 : 6 CVEs — migrer vers Authelia ou ZITADEL

Sécurité & Monitoring12 min de lecture10 étapes

Le 16 septembre 2026, l'équipe Keycloak publiait la version 26.7.4 avec un bulletin inhabituel : six CVEs corrigées en un seul ticket, dont deux permettant à n'importe quel inconnu sur Internet de crasher votre serveur sans authentification. Si vous gérez le SSO de moins de dix applications sur un VPS, ce signal mérite qu'on pose la question : Keycloak est-il encore le bon outil ? Ce guide passe en revue les six vulnérabilités, compare les alternatives légères Authelia et ZITADEL, et propose un chemin de migration concret avec conservation de Keycloak en parallèle.

Sommaire· Keycloak v26.7.4 — pourquoi 6 CVEs en une semaine changent la donne1/10
  1. 01Keycloak v26.7.4 — pourquoi 6 CVEs en une semaine changent la donne
  2. 02Ce que chaque CVE aurait pu permettre — résumé non technique
  3. 03Keycloak vs Authelia vs ZITADEL — choisir selon votre contexte VPS
  4. 04Authelia — SSO léger pour moins de 10 applications
  5. 05Migrer de Keycloak vers Authelia — export OIDC, configuration, tests
  6. 06ZITADEL — IdP API-first pour équipes de développement
  7. 07Migrer de Keycloak vers ZITADEL — procédure sur VPS
  8. 08Garder Keycloak en parallèle pendant la migration — la stratégie de bascule propre
  9. 09Erreurs courantes lors de la migration SSO
  10. 10Après la migration — tester l'authentification de chaque application

Keycloak v26.7.4 — pourquoi 6 CVEs en une semaine changent la donne

La note de release 26.7.4 est sortie le 16 septembre 2026, une semaine après la 26.7.3 qui avait déjà colmaté plusieurs brèches. Ce rythme révèle moins un bug isolé qu'une dette structurelle dans la surface d'exposition de Keycloak : le projet supporte des dizaines de protocoles (OIDC, SAML, LDAP, Kerberos), une interface d'administration complète et un moteur de thèmes côté serveur. Chacune de ces couches a une surface réseau propre.

Les deux vulnérabilités les plus graves (CVE-2026-79651, CVSS 7.5, et CVE-2026-18212, CVSS 7.5) sont particulièrement emblématiques : elles permettent à un attaquant non authentifié d'épuiser la mémoire du processus Keycloak en envoyant des requêtes malformées sur des endpoints publics — la page de login et les endpoints SAML — sans avoir besoin d'un compte. Sur un VPS avec 2 à 4 Go de RAM partagés entre plusieurs services, un tel vecteur peut faire tomber l'ensemble de la stack.

L'autre signal est que la 26.7.1, sortie quelques semaines plus tôt, avait déjà introduit des régressions de sécurité que la 26.7.4 vient corriger partiellement (CVE-2026-74909 est explicitement documentée comme « correctif incomplet » de la 26.7.1). Deux cycles de patch en moins d'un mois sur des versions mineures consécutives, c'est le signe que le code de surface est sous pression.

Ce que chaque CVE aurait pu permettre — résumé non technique

  • CVE-2026-79651 (CVSS 7.5 — haute) : Keycloak accepte des balises de locale arbitraires sur les endpoints de thème sans les limiter ni les invalider. Un attaquant envoie en boucle des locale uniques depuis le réseau public ; chaque requête alloue de la mémoire sans jamais la libérer. Résultat : crash du processus par épuisement mémoire, sans le moindre compte utilisateur.
  • CVE-2026-18212 (CVSS 7.5 — haute) : les helpers SAML Redirect DEFLATE font fuiter l'état natif de la bibliothèque zlib. Une requête SAML malformée suffit à provoquer une corruption mémoire qui peut aller jusqu'au crash du serveur ou à une fuite de données de session.
  • CVE-2026-74909 (CVSS 8.1 — haute) : un point-virgule encodé en pourcentage (%3B) contourne le nettoyage des paramètres matrix dans le PathMatcher. Résultat : un attaquant peut accéder à une ressource protégée par une politique plus stricte en utilisant la version moins restrictive de la même route.
  • CVE-2026-90997 (CVSS 7.4 — haute) : sur les déploiements MySQL ou MariaDB, le nombre de lignes par défaut retourné par le moteur de stockage rend les contrôles anti-replay inefficaces. Un artefact d'authentification déjà utilisé peut être réutilisé.
  • CVE-2026-17526 (CVSS 7.2 — haute) : le rôle impersonation peut usurper l'identité d'un administrateur de realm. Un opérateur avec des permissions restreintes peut élever ses droits jusqu'à l'administration complète.
  • CVE-2026-19607 (CVSS 5.3 — moyenne) : une collision de nom d'utilisateur dans le flux de fédération d'identité (broker) verrouille le compte légitime. L'utilisateur légitime est éjecté de son propre compte sans action de sa part.

Keycloak vs Authelia vs ZITADEL — choisir selon votre contexte VPS

Faites défiler le tableau

CritèreKeycloak 26.7.4Authelia 4.xZITADEL 2.x
RAM au repos512 Mo – 1 Go (JVM)< 30 Mo (Go)150 – 300 Mo (Go + CockroachDB ou PostgreSQL)
Langage / runtimeJava (JVM)Go — binaire uniqueGo — binaire unique
LicenceApache 2.0Apache 2.0Apache 2.0 (core)
ProtocolesOIDC, SAML, LDAP, Kerberos, WebAuthnOIDC, 2FA (TOTP, WebAuthn)OIDC, OAuth2, SAML, LDAP, WebAuthn
Interface adminComplète — realm, clients, fluxYAML uniquementConsole web + API gRPC/REST
Idéal pour> 20 apps, fédération LDAP, SAML enterprise< 10 apps, proxy auth, équipe tech< 20 apps, équipe dev, API-first
Maintenabilité sur VPSLourde : JVM, configuration XML, migrationsLégère : 1 fichier YAML, 1 binaireMoyenne : base de données requise, mais API claire
Surface CVE (historique)Élevée : 6 CVE en v26.7.4 seuleFaible : < 5 CVE depuis 2022Faible à moyenne : projet plus jeune

Authelia — SSO léger pour moins de 10 applications

Authelia est un serveur d'authentification et d'autorisation écrit en Go. Il expose une interface de validation HTTP que votre reverse proxy (nginx, Traefik, Caddy) peut interroger pour protéger des applications sans que celles-ci aient à implémenter OIDC. Il supporte aussi le flux OIDC complet pour les applications qui le requièrent.

L'empreinte mémoire est sa principale force opérationnelle : au repos, Authelia consomme entre 20 et 30 Mo de RAM selon les mesures publiées dans les issues GitHub du projet (discussions #5939 et #6048). Sur un VPS à 2 Go partagés entre Nextcloud, un serveur mail et un reverse proxy, c'est négligeable là où Keycloak avec sa JVM consommerait 512 Mo minimum avant toute charge.

La configuration est entièrement déclarative (YAML). Il n'y a pas d'interface graphique d'administration — un avantage pour la sécurité (aucun endpoint d'admin exposable) et un inconvénient pour les équipes non techniques. Pour un développeur solo ou une petite équipe gérant ses propres applications sur VPS, Authelia est souvent le bon choix.

Migrer de Keycloak vers Authelia — export OIDC, configuration, tests

  1. Exporter la configuration OIDC de Keycloak

    Dans la console d'administration Keycloak, naviguez vers Realm Settings → Export. Cochez « Export clients » et « Export groups ». Téléchargez le JSON produit — il contient la liste de vos clients OIDC avec leurs redirect URIs et leurs scopes. Ce fichier sert de référence pour reconfigurer chaque application dans Authelia, pas à importer directement.

  2. Installer Authelia en Docker Compose

    Créez un fichier docker-compose.yml minimal :

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

    Créez le répertoire config/ et placez-y configuration.yml. La documentation officielle fournit un squelette complet à https://www.authelia.com/configuration/prologue/introduction/.

  3. Configurer les clients OIDC dans Authelia

    Pour chaque application migrée depuis Keycloak, ajoutez une entrée dans la section identity_providers.oidc.clients du fichier configuration.yml :

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

    Le secret se génère avec authelia crypto hash generate pbkdf2 --variant sha512. Consultez le JSON exporté de Keycloak pour retrouver les redirect URIs de chaque client.

  4. Configurer le reverse proxy pour qu'il interroge Authelia

    Authelia fonctionne comme un middleware de validation. Dans nginx, ajoutez un bloc 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://mon-app:3000;
    }

    Pour les applications qui utilisent OIDC nativement, pointez l'issuer vers https://auth.votre-domaine.com.

  5. Tester chaque application avant de couper Keycloak

    Pour chaque application migrée, vérifiez trois flux : connexion initiale (redirection vers Authelia → authentification → retour vers l'app), logout (invalidation du cookie Authelia et de la session app), et second facteur si activé (TOTP ou WebAuthn). Ne coupez Keycloak que lorsque tous les flux de toutes les applications sont validés sur Authelia. Maintenez Keycloak en mode stop (conteneur arrêté mais non supprimé) pendant 30 jours pour pouvoir revenir en arrière.

ZITADEL — IdP API-first pour équipes de développement

ZITADEL est un Identity Provider écrit en Go, sous licence Apache 2.0, publié par l'équipe suisse ZITADEL Cloud. Son dépôt officiel est github.com/zitadel/zitadel. Là où Authelia est pensé comme un middleware de proxy, ZITADEL est un IdP complet avec une API gRPC/REST de première classe — les organisations qui créent des applications, pas seulement qui les protègent.

L'empreinte mémoire est supérieure à Authelia car ZITADEL requiert une base de données (PostgreSQL ou CockroachDB), mais reste dans une fourchette de 150 à 300 Mo selon la charge — loin des 512 Mo minimum de la JVM Keycloak. Le projet supporte OIDC, OAuth2, SAML 2.0, LDAP en lecture, et WebAuthn.

ZITADEL est particulièrement adapté aux équipes qui développent des applications SaaS et ont besoin de gérer des organisations et des utilisateurs programmatiquement via l'API, sans passer par une interface graphique pour chaque opération. La console web est disponible mais l'API est le chemin principal.

Migrer de Keycloak vers ZITADEL — procédure sur VPS

  1. Déployer ZITADEL avec Docker Compose

    ZITADEL fournit un fichier docker-compose.yml officiel dans son dépôt GitHub (répertoire e2e/). La configuration minimale requiert PostgreSQL (ou CockroachDB) et une variable ZITADEL_MASTERKEY de 32 caractères :

    ZITADEL_MASTERKEY=$(openssl rand -base64 32)

    Consultez la documentation officielle à https://zitadel.com/docs/self-hosting/deploy/compose pour le fichier complet et les variables d'environnement requises.

  2. Créer les applications OIDC dans ZITADEL

    Dans la console ZITADEL (https://votre-instance:8080), créez une Organisation, puis un Projet. Dans ce projet, créez une Application de type « Web » ou « User Agent » selon votre cas.

    ZITADEL génère un Client ID et un Client Secret. Configurez les Redirect URIs en vous appuyant sur le JSON exporté de Keycloak. Le Discovery endpoint est disponible à https://votre-instance:8080/.well-known/openid-configuration.

  3. Migrer les utilisateurs depuis Keycloak

    Keycloak permet d'exporter les utilisateurs d'un realm en JSON depuis la console (Realm Settings → Export → cocher « Export users »). Les mots de passe hashés ne sont pas directement importables dans ZITADEL — les algorithmes de hash diffèrent.

    Deux approches : (1) import des métadonnées utilisateur via l'API ZITADEL (POST /management/v1/users/human/_import) avec forçage de réinitialisation de mot de passe à la première connexion, ou (2) migration progressive via la connexion sociale/OIDC (ZITADEL consomme Keycloak comme IdP externe le temps de la transition). L'approche (2) évite de demander à tous les utilisateurs de réinitialiser leur mot de passe le même jour.

  4. Configurer vos applications pour pointer vers ZITADEL

    Mettez à jour les variables d'environnement de chaque application :

    OIDC_ISSUER=https://votre-instance:8080
    OIDC_CLIENT_ID=<client-id-zitadel>
    OIDC_CLIENT_SECRET=<client-secret-zitadel>

    Le Discovery endpoint permet à la plupart des bibliothèques OIDC de se configurer automatiquement. Testez chaque application avec un compte de test avant de basculer la production.

  5. Valider les flux SSO et désactiver Keycloak

    Vérifiez connexion, logout, rafraîchissement de token et second facteur sur chaque application. Sur ZITADEL, l'onglet « Sessions » de la console vous permet de voir en temps réel les sessions actives et de les invalider si besoin.

    Conservez le conteneur Keycloak arrêté (non supprimé) pendant 30 jours. Supprimez-le après cette période de rétention.

Garder Keycloak en parallèle pendant la migration — la stratégie de bascule propre

L'objection classique à la migration d'un IdP est juste : toutes vos applications partagent le même fournisseur d'identité. Si la migration échoue à mi-parcours, personne ne peut se connecter.

La stratégie recommandée est de maintenir Keycloak opérationnel pendant toute la migration et de basculer les applications une par une. Plusieurs mécanismes rendent cela simple :

DNS par application : chaque application pointe vers un IdP via une variable d'environnement. Changez OIDC_ISSUER d'une application à la fois, testez, puis passez à la suivante. Keycloak continue de servir les applications non encore migrées.

Sessions indépendantes : OIDC crée des sessions applicatives indépendantes. Une application migrée vers Authelia ou ZITADEL n'invalide pas les sessions actives des applications encore sur Keycloak.

Horizon de 30 jours : la plupart des migrations de moins de 10 applications prennent 2 à 5 jours de travail technique. Planifiez une semaine, validez pendant 30 jours, puis coupez. Le docker compose stop keycloak est réversible en 30 secondes.

Erreurs courantes lors de la migration SSO

Quatre pièges reviennent systématiquement dans les migrations Keycloak vers une alternative légère.

Oublier les redirect URIs : Keycloak valide les redirect URIs de manière exacte par défaut. Authelia et ZITADEL font de même. Si votre application envoie https://app.exemple.com/callback mais que la configuration de l'IdP déclare https://app.exemple.com/oauth/callback, l'authentification échoue avec une erreur redirect_uri_mismatch. Vérifiez chaque URI dans le JSON exporté de Keycloak.

Les scopes et claims ne sont pas identiques : Keycloak peut être configuré pour retourner des claims personnalisés (rôles, attributs utilisateur) que vos applications consomment. Authelia retourne par défaut openid, profile et email uniquement. Si votre application dépend d'un claim roles ou groups, vérifiez que votre IdP de destination peut le produire avant de couper Keycloak.

La session de l'IdP et la session de l'application sont distinctes : un logout de l'IdP ne déconnecte pas automatiquement l'application si celle-ci n'implémente pas le back-channel logout. Les utilisateurs peuvent rester connectés à une application après avoir été déconnectés de l'IdP. Testez explicitement le flux de logout complet.

Le clock skew invalide les tokens : les tokens OIDC ont une durée de validité courte (typiquement 5 à 15 minutes). Si l'horloge de votre VPS dérive de plus de quelques dizaines de secondes, les tokens expirent avant d'être utilisés. Vérifiez que chrony ou systemd-timesyncd est actif sur votre VPS avec timedatectl status.

Après la migration — tester l'authentification de chaque application

Une migration SSO n'est pas terminée quand la première connexion fonctionne. Voici la grille de validation minimale à appliquer à chaque application.

Connexion initiale : ouvrez une session de navigation privée (aucun cookie existant) et connectez-vous. La redirection vers l'IdP doit se faire, l'authentification réussir, et le retour vers l'application atterrir sur la bonne page.

Refresh token : attendez l'expiration de l'access token (ou forcez-la en modifiant l'heure système en ddev) et vérifiez que l'application rafraîchit silencieusement le token sans forcer une reconnexion.

Logout : déconnectez-vous depuis l'application et vérifiez que la session est invalidée côté IdP (Authelia : cookie authelia_session absent ; ZITADEL : session absente de la console). Tentez d'accéder à une ressource protégée après le logout — vous devez être redirigé vers la page de login.

Second facteur : si le 2FA est activé, testez TOTP et WebAuthn séparément. Les sessions WebAuthn sont liées au domaine — une migration de domaine simultanée invaliderait tous les passkeys existants.

Accès non autorisé : tentez d'accéder à une ressource protégée sans token valide et vérifiez que la réponse est bien un 401 ou une redirection vers l'IdP, pas un 500 ou une page d'application sans données.

Authelia ou ZITADEL déployés sur votre VPS en quelques minutes

ServOrbit propose Authelia en application marketplace. Déployez un SSO léger sur votre VPS sans configuration manuelle de Docker Compose.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet