
Confluence में सर्वर ब्रोकन एक्सेस कंट्रोल - CVE-2023-22515
Atlassian को एक संभावित कमजोरी के बारे में सूचित किया गया था जिसका शोषण किया जा सकता है और प्रशासनिक पहुँच के माध्यम से वातावरण से समझौता किया जा सकता है। 4 अक्टूबर, 2023 को, Atlassian ने CVE-2023-22515 के संबंध में एक सुरक्षा सलाह जारी की, जिसे 10.0 का CVE मिला। यह कमजोरी Confluence Server और Data Center editions के संस्करण 8.0.0 में शुरू की गई थी और संस्करणों <8.3.3, <8.4.3, <8.5.2 में मौजूद है।
हमलावर इस कमजोरी का शोषण करके Confluence में पूर्ण प्रशासनिक विशेषाधिकारों वाला एक अतिरिक्त खाता बना सकता है। हमलावर को इस कमजोरी का शोषण करने के लिए कोई पूर्व जानकारी की आवश्यकता नहीं है। ऐसा माना जाता है कि यह कमजोरी अन्य अज्ञात हमले वैक्टर को सक्षम बनाती है और इसे जल्द से जल्द पैच किया जाना चाहिए।
इस कमजोरी के साथ, हमलावर Confluence कॉन्फ़िगरेशन के सेटअप चरण में वापस आ सकता है, प्रशासनिक पहुँच वाला एक नया उपयोगकर्ता बनाने में सफल हो सकता है। यह सब संभव है क्योंकि Confluence Apache Struts फ्रेमवर्क का उपयोग करके बनाया गया है, जो XWork पैकेज पर निर्भर करता है। XWork आपको जावा क्लास के रूप में क्रियाओं को परिभाषित करने की अनुमति देता है। प्रत्येक क्रिया को URL के माध्यम से लागू किया जा सकता है, और संबंधित जावा क्लास अनुरोध को संभालेगा, क्रिया की आवश्यकता के अनुसार करेगा, और प्रतिक्रिया उत्पन्न करेगा।
यह समस्या मुख्य रूप से एक वर्ग क्रिया के कारण होती है, जहाँ हम URL के माध्यम से विशेषताओं को लागू कर सकते हैं
खोज ServerInfoAction क्रिया में होती है, जहाँ हम क्लास के गेटर्स/सेटर्स में हेरफेर कर सकते हैं और सेटअप कॉन्फ़िगरेशन को रीसेट कर सकते हैं।
यदि आप ServerInfoAction क्लास के कोड का विश्लेषण करते हैं, तो आप देखेंगे कि यह ConfluenceActionSupport क्लास का विस्तार करता है। ऐसा करने से, यह अपने सभी तरीकों को भी प्राप्त करेगा। ऐसा ही एक तरीका एक गेटर है जो BootstrapStatusProvider ऑब्जेक्ट लौटाता है:
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
हम BootstrapStatusProvider क्लास के बारे में इसलिए चिंतित हैं क्योंकि इसमें एक और गेटर तरीका है जिसका उपयोग हम ApplicationConfiguration ऑब्जेक्ट प्राप्त करने के लिए कर सकते हैं:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
इस ऑब्जेक्ट में एप्लिकेशन का कॉन्फ़िगरेशन होता है, जिसमें एक विशेषता शामिल है जो Confluence को बताती है कि प्रारंभिक सेटअप पूरा हो गया है या नहीं। ऐसी विशेषता को ApplicationConfig क्लास में एक सेटर का उपयोग करके संशोधित किया जा सकता है:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
यदि हम setSetupComplete(false) को कॉल कर सकते हैं, तो हम सेटअप कॉन्फ़िगरेशन प्रक्रिया को रीसेट कर सकते हैं, और हम इसे नीचे दिए अनुसार गेटर्स/सेटर्स विधियों का उपयोग करके कर सकते हैं;
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
यह URL उन सभी विधियों को कॉल करेगा जिनका हमने ऊपर उल्लेख किया है, सेटअप को रीसेट करने के लिए जिम्मेदार लक्ष्य विधि तक पहुँचता है।
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
नीचे, हमारे पास Confluence के एक कमजोर संस्करण वाले सर्वर का उदाहरण है।
आइए ऊपर बताए अनुसार विधि कॉल का उपयोग करके सेटअप प्रक्रिया को पुनरारंभ करने का प्रयास करें;
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
setupcomplete पैरामीटर को false पर सेट करने के बाद, हमें return success प्राप्त होगा। इसका मतलब है कि पैरामीटर बदलने का प्रयास सफल रहा।
आइए सेटअप URL तक पहुँचकर एक नया खाता बनाने का प्रयास करें, जिस प्रक्रिया को हम रीसेट करने का प्रयास कर रहे हैं।
http://atlassian.poc:8090/setup/setupadministrator-start.action
हम सेटअप प्रक्रिया को रीसेट करने और प्रशासनिक पहुँच वाला एक नया उपयोगकर्ता बनाने में सफल रहे।
इस कमजोरी को संस्करणों 8.3.3, 8.4.3 और 8.5.2 में ठीक कर दिया गया है। इससे नए संस्करण शाखाएं भी सुरक्षित होनी चाहिए।
अधिक विवरण के लिए, Atlassian ने अपनी वेबसाइट पर इस कमजोरी का विवरण जारी किया है (अधिक जानकारी - Atlassian)।