
Keycloak डेटाबेस में CVE-2026-18963 एक्सप्लॉइटेशन के निशान खोजें (Keycloak बिना प्रमाणीकरण के खाता अपहरण)
एक psql स्क्रिप्ट जो CVE-2026-18963 के शोषण (reset-credentials प्रवाह के माध्यम से अनधिकृत अकाउंट हैक) के निशानों के लिए Keycloak PostgreSQL डेटाबेस खोजती है।
KYOS द्वारा प्रकाशित। हमने इसे अपने संचालित Keycloak डिप्लॉयमेंट्स को पैच करते समय लिखा था, ताकि यह सत्यापित किया जा सके कि एक्सपोज़र विंडो के दौरान किसी का अकाउंट हैक नहीं हुआ है।
CVE-2026-18963, keycloak-services के reset-credentials प्रवाह में एक दोष है (keycloak#51833)। एक अनधिकृत हमलावर मेल सत्यापन लिंक पर क्लिक किए बिना किसी भी उपयोगकर्ता के लिए पासवर्ड रीसेट प्रक्रिया पूरी कर सकता है और फिर अकाउंट पर नया पासवर्ड सेट कर सकता है। कोई उपयोगकर्ता इंटरैक्शन आवश्यक नहीं है।
गंभीरता: क्रिटिकल, CVSS v3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N), Red Hat और NVD के अनुसार। मूल कारण प्रमाणीकरण प्रवाह में अनुचित स्थिति सत्यापन है, जिसे keycloak#51844 में ठीक किया गया है।
| स्ट्रीम | फिक्स संस्करण |
|---|---|
| 26.7.x | 26.7.2 (रिलीज़ नोट्स) |
| 26.6.x | 26.6.6 |
| 26.4.x (LTS) | 26.4.15 |
| 26.8 | 26.8.0 |
समर्थित स्ट्रीम में उन संस्करणों से नीचे का सब कुछ कमज़ोर है। समर्थन से बाहर रिलीज़ (26.5.x, 26.3 और पुराने) के लिए कोई फिक्स नहीं है: एक्सपोज़र मान लें और किसी ठीक की गई स्ट्रीम में अपग्रेड करें। Red Hat विरासत RH-SSO 7 को प्रभावित नहीं बताता है; Red Hat Build of Keycloak 26.4/26.6, 26.4.15-1 / 26.6.6-1 में ठीक किया गया है।
सेल्फ-सर्विस पासवर्ड रीसेट अक्षम करने से कमज़ोर प्रवेश बिंदु हट जाता है: हर realm के लिए Admin console > Realm settings > Login > "Forgot password" बंद करें। एडमिन API के माध्यम से: PUT /admin/realms/{realm} को {"resetPasswordAllowed": false} के साथ।
यह login-actions/reset-credentials एंडपॉइंट को ब्लॉक करता है, लेकिन वैध उपयोगकर्ताओं को अपना पासवर्ड रीसेट करने से भी रोकता है, इसलिए इसे अपग्रेड करने तक अंतरिम उपाय मानें। ध्यान दें कि Red Hat इस CVE के लिए कोई समर्थित शमन सूचीबद्ध नहीं करता है; पैचिंग ही एकमात्र वास्तविक समाधान है।
cve-2026-18963-keycloak-hunt.sql चार केवल-पठनीय क्वेरी चलाती है:
| क्वेरी | यह क्या पता लगाती है |
|---|---|
| Q0 | क्या realm लॉगिन/एडमिन इवेंट्स को बिल्कुल संग्रहीत करता है, और उनका TTL। यदि इवेंट्स बंद हैं या समाप्त हो चुके हैं, तो Q2/Q3 में खाली परिणाम कुछ भी साबित नहीं करते। |
| Q1 | एक्सपोज़र विंडो के भीतर सेट किया गया हर पासवर्ड क्रेडेंशियल (credential.created_date)। यह हैक स्वयं है और इवेंट लॉगिंग बंद होने पर भी काम करता है। |
| Q2 | रीसेट/क्रेडेंशियल लॉगिन इवेंट्स, पिछले 24 घंटों में बिना SEND_RESET_PASSWORD के पूर्ण किए गए किसी भी रीसेट को फ़्लैग करना (no_email_before = t)। यह फ़्लैग CVE का संकेत है: हमलावर ने मेल कभी ट्रिगर नहीं किया। |
| Q3 | एडमिन-API क्रेडेंशियल रीसेट और execute-actions ऑपरेशन, ताकि एडमिन-संचालित मार्ग को खारिज किया जा सके। |
# defaults: realm 'master', window since 2026-06-01
psql -U keycloak -d keycloak -f cve-2026-18963-keycloak-hunt.sql
# explicit realm and window (run once per realm, quote values exactly like this)
psql -U keycloak -d keycloak \
-v realm="'myrealm'" -v since="'2026-05-01'" \
-f cve-2026-18963-keycloak-hunt.sql
since को अपने कमज़ोर संस्करण के लाइव होने से ठीक पहले सेट करें। Kubernetes पर:
kubectl exec -it my-postgres-pod -- \
psql -U keycloak -d keycloak -v realm="'myrealm'" -v since="'2026-05-01'" \
-f - < cve-2026-18963-keycloak-hunt.sql
Q1 में पंक्तियाँ स्वतः समझौता नहीं हैं। प्रत्येक को एक ज्ञात वैध कारण (सेल्फ-सर्विस रीसेट, हेल्पडेस्क कार्रवाई, नया नामांकन) से मिलाएँ और किसी भी अस्पष्टीकृत चीज़ को हैक का उम्मीदवार मानें।
RESET_PASSWORD, UPDATE_CREDENTIAL या UPDATE_PASSWORD पर no_email_before = t वाली Q2 पंक्तियाँ इस CVE के शोषण के सबसे मज़बूत संकेतक हैं। ip_address कॉलम को अपने एक्सेस लॉग्स से संबद्ध करें।
पहले Q0 जाँचें: लॉगिन इवेंट्स समाप्त होते हैं (events_expiration) और पूरी तरह अक्षम हो सकते हैं। Q1 समाप्त नहीं होती, इसलिए यह सबसे विश्वसनीय जाँच है।
MIT, देखें LICENSE। बिना किसी वारंटी के, यथास्थिति प्रदान किया गया।