
CVE-2021-29447 का चरण-दर-चरण प्रदर्शन, जो WordPress Media Library में एक XXE भेद्यता है, जो तैयार किए गए WAVE अपलोड के माध्यम से संवेदनशील फ़ाइलों को लीक करती है, जिसमें शोषण और उपचार के विवरण शामिल हैं।
एक उपयोगकर्ता जो दुर्भावनापूर्ण WAVE फ़ाइल अपलोड करने की क्षमता रखता है (जैसे कोई लेखक), वर्डप्रेस की मीडिया लाइब्रेरी में XML पार्सिंग की एक समस्या का शोषण कर सकता है, जिससे XXE हमले हो सकते हैं और इससे फ़ाइल सिस्टम का खुलासा हो सकता है
XML बाह्य इकाई (XXE) भेद्यताएँ
XML कस्टम इकाइयों को परिभाषित करने की संभावना प्रदान करता है जिन्हें दस्तावेज़ में पुन: उपयोग किया जा सकता है। उदाहरण के लिए, इसका उपयोग दोहराव से बचने के लिए किया जा सकता है। निम्नलिखित कोड आगे उपयोग के लिए myEntity नामक इकाई को परिभाषित करता है।

परिभाषित इकाइयों का मान URI द्वारा संदर्भित बाहरी स्रोत से भी उत्पन्न हो सकता है। इस स्थिति में, उन्हें बाहरी इकाइयाँ कहा जाता है:

XXE हमले इस सुविधा का दुरुपयोग करते हैं। यदि कोई हमलावर URI के रूप में file:///var/www/wp-config.php प्रदान करता है, तो वह संवेदनशील फ़ाइल सामग्री को सफलतापूर्वक लीक कर सकता है। और हमला तब संभव है जब ढीली कॉन्फ़िगर किया गया XML पार्सर उपयोगकर्ता-नियंत्रित सामग्री पर चलाया जाता है।
XXE in WordPress
वर्डप्रेस में एक मीडिया लाइब्रेरी है जो प्रमाणित उपयोगकर्ताओं को मीडिया फ़ाइलें अपलोड करने में सक्षम बनाती है जिनका उपयोग उनके ब्लॉग पोस्ट में किया जा सकता है। इन मीडिया फ़ाइलों से मेटा जानकारी निकालने के लिए, जैसे कलाकार का नाम या शीर्षक, वर्डप्रेस getID3 लाइब्रेरी का उपयोग करता है। इस मेटाडेटा का कुछ भाग XML रूप में पार्स किया जाता है। यहाँ, एक संभावित XXE भेद्यता (पंक्ति 730) की सूचना दी गई थी।

libxml_disable_entity_loader(true) फ़ंक्शन को अप्रचलित कर दिया गया था क्योंकि PHP 8 संस्करण Libxml2 v2.9+ का उपयोग करते हैं, जो डिफ़ॉल्ट रूप से बाहरी इकाई लाने को अक्षम करता है।
निम्नलिखित कमांड का उपयोग करके एक दुर्भावनापूर्ण WAVE फ़ाइल बनाएँ

एक dtd फ़ाइल बनाएँ और फिर यह कोड जोड़ें, यह आपको wp-config.php को प्राप्त करने की अनुमति देगा जिसमें डेटाबेस क्रेडेंशियल्स जैसा संवेदनशील डेटा होता है।

अब एक HTTP सर्वर लॉन्च करें

दुर्भावनापूर्ण .wav फ़ाइल को वर्डप्रेस एप्लिकेशन पर अपलोड करें। एक बार जब आप .wav फ़ाइल अपलोड करते हैं, तो आपको अपने HTTP सर्वर लॉग में निम्नलिखित अनुरोध दिखाई देना चाहिए। ध्यान दें, डेटा को प्रभावी ढंग से बाहर निकालने के लिए डिकोडिंग के लिए Zlib का उपयोग करें।

उसके बाद आपको डेटाबेस क्रेडेंशियल्स मिलेंगे, डेटाबेस में लॉगिन करें और व्यवस्थापक खोजने का प्रयास करें

corp-001 व्यवस्थापक है, उसके पासवर्ड हैश को क्रैक करें और फिर एक व्यवस्थापक के रूप में लॉगिन करें

वर्डप्रेस ने संस्करण 5.7.1 में libxml_disable_entity_loader() फ़ंक्शन के कॉल को पुनः शामिल करके भेद्यता को पैच किया, जिसे PHP 8 में अप्रचलित कर दिया गया था। PHP चेतावनियों से बचने के लिए, कॉल में PHP त्रुटि दमन ऑपरेटर @ जोड़ा गया था।

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447