
Atlassian Confluence में CVE-2023-22518 के लिए शोषण। भेद्यता का विस्तृत विवरण प्रदान करता है, जिसमें वातावरण सेटअप, डिफिंग के माध्यम से मूल कारण विश्लेषण, और व्यवस्थापक पहुंच प्राप्त करने के लिए शोषण चरण शामिल हैं।
CVE-2023-22518 Confluence में
CVE-2023-22518 : इस भेद्यता को "Confluence के डेटाबेस और सर्वर में अनुचित प्राधिकरण भेद्यता" के रूप में वर्णित किया गया है। यह बग Atlassian उत्पादों के On-premises संस्करणों को प्रभावित करता है।
पर्यावरण सेटअप भेद्य संस्करण 8.0.4 का उपयोग करें डाउनलोड URL : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Trial Installation चुनें, फिर मुफ्त trial key प्राप्त करने के लिए लिंक पर क्लिक करें। उसके बाद क्लस्टर सेटअप करें : non-cluster चुनें

फिर डेटाबेस सेटअप पर जाएँ -> MySQL चुनें

निर्देशों का पालन करें :
डेटाबेस कॉन्फ़िगर करें, उपयोगकर्ता और पासवर्ड तालिका बनाएँ
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
फिर /etc/mysql/my.cnf संपादित करें। निम्नलिखित पंक्तियाँ जोड़ें :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

फिर MySQL और Confluence को पुनरारंभ करें। फिर localhost:8090 पर सेटअप पेज पर जाएँ और बनाए गए डेटाबेस का उपयोग करके भरें।

कनेक्शन सफलता की जाँच करें, Next पर क्लिक करें। फिर साइन अप करें।

डीबग
*Diff दो संस्करणों की jar फ़ाइलों को IntelliJ पर diff करें। विशेष रूप से, मैंने संस्करण 8.0.4 और 7.19.16 को diff किया। विवरण के अनुसार, दोनों संस्करणों की confluence.jar फ़ाइल को आपस में diff करें।

पैच और अनपैच किए गए संस्करण के बीच अंतर @WebSudoRequired और @SystemAdminOnly है। WebSudoRequired एक सुविधा है जो प्रशासक सत्रों की सुरक्षा को बढ़ाती है। जब किसी प्रशासन क्षेत्र तक पहुँचने का प्रयास किया जाता है, तो सिस्टम पासवर्ड पुनः दर्ज करने का अनुरोध करेगा भले ही आपने सिस्टम में लॉगिन किया हो। यह प्रशासनिक पहुँच सुनिश्चित करने के लिए एक अतिरिक्त प्रमाणीकरण चरण जोड़ता है।
SystemAdminOnly : यह एक सुविधा है जो प्रशासनिक कार्यक्षमता को केवल प्रशासक खातों तक सीमित करती है। यह सुनिश्चित करने में मदद करता है कि केवल अधिकृत खाते ही महत्वपूर्ण और सिस्टम को प्रभावित करने वाले ऑपरेशन कर सकें।
RestoreAction.class में validate() पर ब्रेकपॉइंट लगाएँ।

getRestoreFileFromUpload द्वारा अपलोड की गई फ़ाइल को सहेजने वाला फ़ंक्शन

getExportDescriptor का उपयोग zip फ़ाइल को अनज़िप करने और उसकी सामग्री पढ़ने के लिए किया जाता है


हालांकि, डीबग करने के बाद भी, भेद्यता का मूल कारण नहीं मिल पाया।
CVE में वर्णित कारण एक प्राधिकरण भेद्यता है। इससे हमारा ध्यान डेवलपर द्वारा अनुमति विभाजन प्रक्रिया के दौरान जावा भाषा की भेद्यता पर शोध की ओर जाता है।
ध्यान struts.xml फ़ाइल पर केंद्रित करें। यह फ़ाइल नामस्थान और इंटरसेप्टर के आधार पर क्रियाओं और रूटिंग के बारे में जानकारी रखती है।




हम देखते हैं कि नामस्थान /json नामस्थान /admin की कार्यक्षमता को बढ़ाता है। इसलिए, /admin नामस्थान के लिए बनाए गए रूट को /json नामस्थान के माध्यम से भी एक्सेस किया जा सकता है।
नामस्थान /json के संदर्भ में, अनुरोध रूटिंग प्रक्रिया में इंटरसेप्टर की एक श्रृंखला से गुज़रना शामिल है। इनमें से एक इंटरसेप्टर, जिसे WebSudoInterceptor कहा जाता है, अनुरोध URI के आधार पर जाँच करता है।
विशेष रूप से, WebSudoInterceptor निम्नलिखित जाँच चरण करता है:
यदि अनुरोध पथ /authenticate.action है तो इसे अनदेखा कर दिया जाता है। यदि अनुरोध पथ /admin है, तो यह जाँचता है कि क्या WebSudoNotRequired विशेषता खाली है।
यदि कोई अनुरोध '/json' पर भेजा जाता है, तो '/json/action' का अनुरोध '/setup/action' और 'admin/action' पर अग्रेषित हो जाता है। इस CVE में, संवेदनशील पथ '/json/setup-restore.action?synchronous=true' है।
Burpsuite में अनुरोध पकड़ें, GET /json/setup-restore.action। हालांकि, "Method Not Allowed" प्रतिक्रिया प्राप्त होती है। POST /json/setup-restore.action?synchronous=true के साथ प्रयास करें, और 200 प्रतिक्रिया प्राप्त होती है।


फ़ाइल xmlexport-200123123001.zip अपलोड करें

और प्रतिक्रिया प्राप्त करें

अब हम admin:admin खाते से लॉगिन कर सकते हैं।

और परिणाम इस प्रकार है
