
CVE-2026-18963 के लिए पता लगाने और सत्यापन उपकरण, जो Keycloak reset-credentials स्थिति बाईपास है। यह संस्करण फिंगरप्रिंटिंग, realm/client/user गणना करता है, और यह परीक्षण करता है कि क्या action-token पूर्वशर्त लागू है, अधिकृत मूल्यांकन के लिए।
https://github.com/user-attachments/assets/005fab89-339a-4e4e-881c-da6a626f6c9e
python3 kc-resetforge.py -h
usage: kc-resetforge.py [-h] [--target TARGET] [--targets-file TARGETS_FILE] [--port PORT] [--realm REALM]
[--client-id CLIENT_ID] [--username USERNAME] [--new-password NEW_PASSWORD] [--skip-enum]
[--enum-only] [--kc-version] [--kc-reset-link] [--corpus-dir CORPUS_DIR] [--label LABEL]
[--enum-realms] [--no-enum-realms] [--enum-clients] [--no-enum-clients] [--enum-users]
[--no-enum-users] [--realm-wordlist REALM_WORDLIST] [--client-wordlist CLIENT_WORDLIST]
[--user-wordlist USER_WORDLIST] [--enum-users-client-id ENUM_USERS_CLIENT_ID]
[--verify-login] [--no-verify-login] [--verify-client-id VERIFY_CLIENT_ID]
[--timeout TIMEOUT] [--request-delay REQUEST_DELAY] [--output-dir OUTPUT_DIR]
[--proxy PROXY] [-d] [-y] [--json-out JSON_OUT]
CVE-2026-18963 Keycloak recon + exploit फ्रेमवर्क (केवल अपना इन्फ्रास्ट्रक्चर)
options:
-h, --help यह सहायता संदेश दिखाएं और बाहर निकलें
--target TARGET एकल लक्ष्य: बेयर होस्ट/IP, host:port, या पूर्ण http(s)://host[:port] URL। स्कीम और पोर्ट
स्वतः पहचाने जाते हैं यदि छोड़ दिए जाएं (पहले https फिर http आज़माता है; डिफ़ॉल्ट क्रमशः 443/80)।
--targets-file के साथ परस्पर अनन्य।
--targets-file TARGETS_FILE
एक फ़ाइल का पथ जिसमें प्रति पंक्ति एक लक्ष्य हो, --target के समान लचीले प्रारूप ('#' टिप्पणियाँ
अनुमत)। प्रत्येक लक्ष्य के विरुद्ध क्रम से recon+exploit चलाता है।
--port PORT --target के लिए पोर्ट ओवरराइड करें (या --targets-file की पंक्तियों के लिए फ़ॉलबैक जिनका अपना पोर्ट नहीं है)।
--targets-file में प्रति-पंक्ति पोर्ट हमेशा प्राथमिकता लेते हैं।
--realm REALM लक्षित करने के लिए realm। यदि छोड़ दिया जाए, तो recon परिणामों से स्वतः चयनित।
--client-id CLIENT_ID
उपयोग करने के लिए OIDC client_id। यदि छोड़ दिया जाए, तो recon परिणामों से स्वतः चयनित।
--username USERNAME लक्षित करने के लिए उपयोगकर्ता नाम। यदि छोड़ दिया जाए, तो recon परिणामों से स्वतः चयनित।
--new-password NEW_PASSWORD
लक्षित उपयोगकर्ता के लिए सेट करने हेतु पासवर्ड (डिफ़ॉल्ट: 'Test123!')
--skip-enum recon पूरी तरह छोड़ें; --realm/--client-id/--username अनिवार्य हो जाते हैं।
--enum-only recon चलाएं और परिणाम प्रिंट करें, लेकिन exploitation का प्रयास न करें।
--kc-version केवल Keycloak संस्करण recon चरण चलाएं (फिंगरप्रिंट + corpus मिलान + पैच स्थिति) और
बाहर निकलें - realm/client/user एन्यूमरेशन और exploitation पूरी तरह छोड़ देता है। --target और
--targets-file दोनों के साथ काम करता है।
--kc-reset-link केवल जांचें कि क्या सेल्फ-सर्विस पासवर्ड-रीसेट ('Forgot Password?' /
resetPasswordAllowed) फ्लो उजागर है, फिर बाहर निकलें - एक एकल गैर-विनाशकारी GET, कोई उपयोगकर्ता नाम
आवश्यक नहीं। हल्के realm+client recon के माध्यम से realm/client स्वतः खोजता है जब तक कि --realm/--client-
id स्पष्ट रूप से न दिए गए हों। Exploitation छोड़ देता है। --target और --targets-file दोनों के साथ काम करता है।
--corpus-dir CORPUS_DIR
सटीक संस्करण मिलान के लिए ज्ञात-संस्करण फिंगरप्रिंट की निर्देशिका (डिफ़ॉल्ट:
kc_version_corpus)।
--label LABEL अज्ञात संस्करण से मिलान करने के बजाय इस लक्ष्य का फिंगरप्रिंट इस संस्करण लेबल के अंतर्गत corpus में सहेजें।
ज्ञात संस्करण के इंस्टेंस पर उपयोग करें।
--enum-realms realm नाम एन्यूमरेट करें (डिफ़ॉल्ट: recon के दौरान चालू)।
--no-enum-realms
--enum-clients प्रति realm client ID एन्यूमरेट करें (डिफ़ॉल्ट: recon के दौरान चालू)।
--no-enum-clients
--enum-users प्रति realm उपयोगकर्ता नाम एन्यूमरेट करें (डिफ़ॉल्ट: recon के दौरान चालू)।
--no-enum-users
--realm-wordlist REALM_WORDLIST
--client-wordlist CLIENT_WORDLIST
--user-wordlist USER_WORDLIST
--enum-users-client-id ENUM_USERS_CLIENT_ID
उपयोगकर्ता-नाम एन्यूमरेशन डायरेक्ट-ग्रांट प्रोब के लिए उपयोग किया जाने वाला क्लाइंट (डिफ़ॉल्ट: admin-cli)।
--verify-login पासवर्ड बदलने के बाद, पासवर्ड-ग्रांट टोकन अनुरोध के माध्यम से नई क्रेडेंशियल्स की पुष्टि करें
(डिफ़ॉल्ट: चालू)।
--no-verify-login
--verify-client-id VERIFY_CLIENT_ID
सत्यापन पासवर्ड ग्रांट के लिए उपयोग किया जाने वाला क्लाइंट।
--timeout TIMEOUT
--request-delay REQUEST_DELAY
exploit श्रृंखला में प्रत्येक अनुरोध से पहले प्रतीक्षा करने के लिए सेकंड (डिफ़ॉल्ट: 0.4)। Keycloak की लॉगिन-
फ्लो स्थिति reset/restart/selector रीप्ले चरणों में समय-संवेदनशील हो सकती है; एक छोटी
देरी श्रृंखला को अधिक विश्वसनीय बनाती है। अक्षम करने के लिए 0।
--output-dir OUTPUT_DIR
--proxy PROXY HTTP(S) प्रॉक्सी के माध्यम से रूट करें: 'burp' (127.0.0.1:8080 शॉर्टहैंड), एक बेयर host:port, या
पूर्ण http(s):// URL।
-d, --debug अनुरोधों/प्रतिक्रियाओं/enum प्रोब्स की विस्तृत डीबग लॉगिंग
-y, --yes 'इस लक्ष्य के साथ जारी रखें?' प्रॉम्प्ट छोड़ें। गैर-इंटरैक्टिव उपयोग के लिए आवश्यक (स्क्रिप्ट,
एकाधिक लक्ष्यों वाला --targets-file, CI)।
--json-out JSON_OUT इस पथ पर recon + exploit परिणामों की JSON रिपोर्ट लिखें।
kc-resetforge — CVE-2026-18963 Keycloak recon + exploit टूल (केवल अपना इन्फ्रास्ट्रक्चर)
Usage
-----
पूर्णतः स्वचालित (recon -> स्वतः-चयन लक्ष्य -> exploit -> सत्यापन):
python3 kc-resetforge.py --target https://localhost:9990 --proxy burp -d
केवल Recon:
python3 kc-resetforge.py --target https://localhost:9990 --enum-only -d
केवल संस्करण + पैच-स्थिति जांच, कई होस्टों पर:
python3 kc-resetforge.py --targets-file targets.txt --kc-version
Recon छोड़ें, सीधे लक्ष्य करें:
python3 kc-resetforge.py --target https://localhost:9990 --realm master \
--client-id account --username admin --skip-enum
आवश्यक: requests, beautifulsoup4, और वैकल्पिक रूप से rich (pip install --break-system-packages)
26.7.226.4.15-1 / इमेज 26.4-2326.6.6-1 / इमेज 26.6-12kc-resetforge एक डिटेक्शन/सत्यापन टूल है। यह पुष्टि करता है कि क्या लक्ष्य का reset-credentials फ्लो एक्शन-टोकन पूर्व-शर्त को सही ढंग से लागू करता है (पैच किया हुआ) या नहीं (भेद्य), अधिकृत मूल्यांकनों में उपयोग के लिए। नीचे लिंक किया गया लेख तंत्र और पुनरुत्पादन पद्धति को सार्वजनिक प्रकटीकरण के लिए उपयुक्त गहराई पर कवर करता है।
पूर्ण विश्लेषण: Forging kc-resetforge: Turning CVE-2026-18963 Into a Repeatable Check
kc-resetforge.py Keycloak से "आप कौन सा संस्करण हैं?" नहीं पूछ सकता, इसका उत्तर देने वाला कोई प्री-ऑथ एंडपॉइंट नहीं है। इसके बजाय यह लक्ष्य का फिंगरप्रिंट लेता है (प्रतिक्रिया फ़ील्ड, स्थिर एसेट हैश, फेविकॉन) और इसकी तुलना उन फिंगरप्रिंट्स के corpus से करता है जिन्हें आपने पहले से ज्ञात संस्करण के साथ लेबल किया है। उस फिंगरप्रिंट के लिए कोई corpus प्रविष्टि नहीं = कोई सटीक संस्करण नहीं, डिज़ाइन द्वारा, बग नहीं।
Corpus को प्रति संस्करण एक बार बनाएं जिस तक आपकी पहुंच है:
python3 kc-resetforge.py --target https://known-26.6.2-host --kc-version --label 26.6.2
python3 kc-resetforge.py --target https://known-26.7.2-host --kc-version --label 26.7.2
[snip]
मेरी लैब:
python3 kc-resetforge.py --target https://localhost:9990 --kc-version --label 26.6.2
python3 kc-resetforge.py --target https://localhost:9991 --kc-version --label 26.6.3
python3 kc-resetforge.py --target https://localhost:9992 --kc-version --label 26.6.4
python3 kc-resetforge.py --target https://localhost:9993 --kc-version --label 26.7.0
python3 kc-resetforge.py --target https://localhost:9994 --kc-version --label 26.7.1
python3 kc-resetforge.py --target https://localhost:9995 --kc-version --label 26.7.2
Recon:
python3 kc-resetforge.py --targets-file targets.txt --kc-version --kc-reset-link --proxy 127.0.0.1:8080
[snip]
[*] Proxying through: http://127.0.0.1:8080
[+] Run Summary
Targets scanned
┏━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┓
┃Target ┃ Keycloak Version ┃ Patch ┃ Reset Link ┃ Result ┃
┡━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━┩
│https://localhost:9990 │ 26.6.2 │ VULNERABLE │ ENABLED │ checked│
│https://localhost:9991 │ 26.6.3 │ VULNERABLE │ ENABLED │ checked│
│https://localhost:9992 │ 26.6.4 │ VULNERABLE │ ENABLED │ checked│
│https://localhost:9993 │ 26.7.0 │ VULNERABLE │ ENABLED │ checked│
│https://localhost:9994 │ 26.7.1 │ VULNERABLE │ ENABLED │ checked│
│https://localhost:9995 │ 26.7.2 │ PATCHED │ ENABLED │ checked│
└───────────────────────┴──────────────────┴────────────┴────────────┴────────┘
प्रविष्टियाँ स्क्रिप्ट के बगल में, kc_version_corpus/ में सहेजी जाती हैं, इसलिए वे बनी रहती हैं चाहे आप टूल को किसी भी निर्देशिका से चलाएं, उस फ़ोल्डर को हटाएं नहीं।
Corpus में क्या है जांचें:
ls kc_version_corpus/
एक बार लेबल हो जाने पर, हर भविष्य का स्कैन स्वतः इसके विरुद्ध मिलान करता है:
python3 kc-resetforge.py --target https://target --kc-version
python3 kc-resetforge.py --targets-file targets.txt --kc-version
यह प्रोजेक्ट केवल निम्नलिखित के लिए प्रदान किया गया है:
इस टूल को किसी भी ऐसी प्रणाली के विरुद्ध न चलाएं जिसके आप स्वामी नहीं हैं या जिसके परीक्षण के लिए आपके पास स्पष्ट लिखित प्राधिकरण नहीं है। तृतीय-पक्ष इन्फ्रास्ट्रक्चर के विरुद्ध अनधिकृत उपयोग अवैध है और इस प्रोजेक्ट के इच्छित उद्देश्य से बाहर है। अनुचित उपयोग के लिए अनुरक्षक कोई दायित्व नहीं मानता।
| फ़ील्ड | मान |
|---|
| CVE | CVE-2026-18963 |
| गंभीरता | क्रिटिकल |
| CVSS | 9.1 |
| CWE | CWE-640 (कमज़ोर पासवर्ड पुनर्प्राप्ति तंत्र) |
| घटक | Keycloak — reset-credentials प्रमाणीकरण फ्लो |
| प्रभाव | बिना प्रमाणीकरण, शून्य-इंटरैक्शन खाता अधिग्रहण (एडमिन खाते शामिल) |
| फिक्स्ड संस्करण | Keycloak 26.7.2 (अपस्ट्रीम) / RHBK 26.4.15-1, 26.6.6-1 |