
EventPrime प्लगइन में अप्रमाणित मनमानी फ़ाइल अपलोड
अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक उद्देश्यों और नैतिक प्रकटीकरण के लिए बनाई गई है। कमजोरी की सूचना जिम्मेदारीपूर्वक विक्रेता को दी गई है और इसे पैच कर दिया गया है। उचित प्राधिकरण के बिना सिस्टम का शोषण करने के लिए इस जानकारी का उपयोग न करें।
WordPress के लिए EventPrime प्लगइन (संस्करण <= 4.2.8.1) में एक अनधिकृत मनमाना फ़ाइल अपलोड कमजोरी पाई गई। यह दोष किसी भी अनधिकृत आगंतुक को सीधे WordPress uploads निर्देशिका में फ़ाइलें अपलोड करने और मीडिया लाइब्रेरी में अटैचमेंट रिकॉर्ड बनाने की अनुमति देता है।
यह कमजोरी इसलिए मौजूद है क्योंकि एक विशिष्ट AJAX एंडपॉइंट को स्पष्ट रूप से nopriv (सार्वजनिक रूप से सुलभ) के साथ पंजीकृत किया गया है और इसमें प्राधिकरण जाँच और उचित फ़ाइल सामग्री सत्यापन दोनों का अभाव है। हमलावर इस एंडपॉइंट का दुरुपयोग करके स्टोरेज को समाप्त कर सकते हैं, मीडिया लाइब्रेरी को स्पैम कर सकते हैं, या संभावित रूप से छवियों के रूप में प्रच्छन्न दुर्भावनापूर्ण पेलोड अपलोड कर सकते हैं।
<= 4.2.8.1मूल कारण असुरक्षित AJAX हुक पंजीकरण और अपर्याप्त फ़ाइल सत्यापन का संयोजन है।
1. असुरक्षित AJAX एंडपॉइंट पंजीकरण:
includes/class-eventprime-event-calendar-management.php में, प्लगइन upload_file_media एक्शन को पंजीकृत करता है। लगभग पंक्ति 557 पर, यह अपने एक्शन मैप में {upload_file_media: true} सेट करता है, जहाँ true _nopriv समर्थन को इंगित करता है। परिणामस्वरूप, gwp_ajax_nopriv_ep_upload_file_media` हुक पंजीकृत होता है, जिससे एंडपॉइंट सभी के लिए उपलब्ध हो जाता है।
2. लापता प्राधिकरण और नॉन्स जाँच:
हैंडलर फ़ंक्शन upload_file_media() (includes/class-ep-ajax.php, पंक्तियाँ 1659-1697) अपलोड विशेषाधिकारों की जाँच के लिए current_user_can() का उपयोग नहीं करता है, न ही यह किसी सुरक्षा नॉन्स को सत्यापित करता है।
3. दोषपूर्ण सत्यापन तर्क:
हैंडलर केवल क्लाइंट द्वारा प्रदान किए गए फ़ाइलनाम (पंक्तियाँ 1661-1664) के आधार पर फ़ाइल एक्सटेंशन (जैसे, jpg/jpeg/png/gif) को मान्य करता है। यह मजबूत सर्वर-साइड सामग्री सत्यापन (जैसे getimagesize() या wp_check_filetype_and_ext()) नहीं करता है। इसका तात्पर्य है कि harmless.jpg के रूप में नाम बदले गए दुर्भावनापूर्ण स्क्रिप्ट या अन्य फ़ाइल प्रकार, WordPress द्वारा मेटाडेटा निर्माण का प्रयास करने से पहले डिस्क पर लिखे जाएँगे।
4. स्थायित्व (Persistence):
फ़ाइल को move_uploaded_file() का उपयोग करके सीधे wp_upload_dir()['path'] में सहेजा जाता है और wp_insert_attachment() के माध्यम से एक WordPress अटैचमेंट बनाया जाता है।
images को निष्पादित करने के लिए गलत कॉन्फ़िगर किया गया है) के साथ मिलकर, यह रिमोट कोड एक्ज़ीक्यूशन (RCE) का कारण बन सकता है।1. पेलोड तैयार करें: अपनी स्थानीय मशीन पर poc.jpg नामक एक नमूना छवि फ़ाइल बनाएँ।
2. अनुरोध निष्पादित करें: बिना किसी सत्र कुकी के सार्वजनिक AJAX एंडपॉइंट पर multipart/form-data POST अनुरोध भेजें:
curl -i \
-F "[email protected];filename=poc.jpg" \
"http://TARGET_SITE/wp-admin/admin-ajax.php?action=ep_upload_file_media"
3. प्रतिक्रिया देखें: सर्वर 200 OK के साथ उत्तर देगा और नव निर्मित अटैचमेंट ID वाला एक JSON ऑब्जेक्ट लौटाएगा:
{"success":true,"data":{"attachment_id":117}}
4. सत्यापन:
wp-content/uploads/<year>/<month>/poc.jpg पर संग्रहीत है।इस कमजोरी को हल करने के लिए, डेवलपर्स को यह करना होगा:
nopriv घोषणा हटाएँ।current_user_can('upload_files') का उपयोग करें कि केवल अधिकृत विशेषाधिकार प्राप्त उपयोगकर्ता ही अपलोड कर सकें।check_ajax_referer() लागू करें।wp_handle_upload()) का उपयोग करें, जो कठोर MIME-प्रकार और सामग्री जाँच करते हैं।