
Proof-of-concept di exploit per CVE-2026-18963, che dimostra l'acquisizione non autenticata dell'account aggirando il flusso di reimpostazione delle credenziali nelle applicazioni web.
★ PoC del Bypass del Flusso Reset-Credentials di CVE-2026-18963 Keycloak ★
https://github.com/user-attachments/assets/ebed1e64-a40c-4333-be18-9acbadd655b0
CVE-2026-18963 è una vulnerabilità critica di acquisizione account non autenticata nel componente
keycloak-servicesdi Keycloak (CVSS 9.1). Un difetto nella macchina a stati dell'autenticazione reset-credentials consente a un attaccante remoto di aggirare il passaggio di verifica email e raggiungere il modulo di aggiornamento password senza possedere il link di reset. Prendendo di mira un nome utente noto, un attaccante può impostare una nuova password e assumere il controllo dell'account della vittima senza autenticazione né interazione dell'utente.
Il flusso vulnerabile memorizza lo stato del selettore di credenziali come nota di autenticazione a livello di sessione invece di associarlo all'esecuzione che ha mostrato il selettore. Il rientro nel flusso di reset può quindi riutilizzare uno stato del selettore obsoleto per un'altra esecuzione. Nelle versioni interessate, l'autenticatore reset-email accetta inoltre un'azione senza confermare che sia stata raggiunta tramite un token di azione email valido. Concatenando questi comportamenti si porta l'attaccante direttamente a UPDATE_PASSWORD.
| Categoria | Versione |
|---|---|
| Vulnerabile | Keycloak 26.0.0 ≤ versione < 26.4.15 |
| Vulnerabile | Keycloak 26.5.0 ≤ versione < 26.6.6 |
| Vulnerabile | Keycloak 26.7.0 ≤ versione < 26.7.2 |
| Corretta | 26.4.15, 26.6.6, 26.7.2 (rispettivi rami di rilascio) |
Questo laboratorio utilizza Keycloak 26.7.1.
Compila ed esegui l'ambiente vulnerabile Keycloak 26.7.1. L'immagine importa un realm di test con il flusso reset-credentials vulnerabile abilitato, un account victim preconfigurato e un portale EQST con una pagina flag protetta.
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
Attendi l'avvio di Keycloak, quindi apri il portale:
http://127.0.0.1:9105
| Prerequisito | Stato in questo laboratorio |
|---|---|
| Keycloak | 26.7.1 (vulnerabile) |
| Realm | cve-lab |
| Password dimenticata | abilitato |
| Account di destinazione | victim |
| URL base di Keycloak | http://127.0.0.1:9105/keycloak |
Lo script exploit.py incluso automatizza la manipolazione dello stato del flusso di reset, richiede il modulo di aggiornamento password senza consumare un token di azione email, modifica la password della vittima e verifica l'acquisizione richiedendo un token di accesso con le nuove credenziali.
Installa la dipendenza Python:
python3 -m pip install requests
Esegui l'exploit con l'URL di Keycloak, il nome utente della vittima e una nuova password:
# python3 exploit.py <keycloak-url> <victim> <new-password>
python3 exploit.py \
http://127.0.0.1:9105/keycloak \
victim \
'NewPassword1!'
Un'esecuzione riuscita stampa:
[*] selector note set via tryAnotherWay
[*] victim submitted: victim
[*] update-password form served without an action token
[+] VULNERABLE - victim password is now 'NewPassword1!'
Apri http://127.0.0.1:9105, clicca su LOGIN e autenticati come victim con la nuova password per confermare l'acquisizione dell'account.