
PoC of CVE-2025-30921
वर्डप्रेस प्लगइन
Component name Newsletters
Vulnerable version <= 4.9.9.7
Component slug newsletters-lite
Component link https://wordpress.org/plugins/newsletters-lite/
Vulnerability class A3: Injection
Vulnerability type SQL Injection
व्यवस्थापक
Newsletters प्लगइन संस्करण 4.9.9.7 या उससे निचले संस्करण के डैशबोर्ड (/wp-admin/admin.php?page=newsletters) में सांख्यिकी अवलोकन चार्ट देखते समय, URL पैरामीटरों के अपर्याप्त इनपुट सत्यापन और एस्केप प्रसंस्करण के कारण SQL इंजेक्शन भेद्यता उत्पन्न होती है।
इस भेद्यता के माध्यम से, व्यवस्थापक विशेषाधिकारों वाला एक हमलावर लक्ष्य साइट से डेटाबेस जानकारी निकालने के लिए इसका शोषण कर सकता है।
Newsletters प्लगइन संस्करण 4.9.9.7 या उससे निचले संस्करण के साथ एक WordPress साइट तैयार करें।
Newsletters प्लगइन डैशबोर्ड मेनू (/wp-admin/admin.php?page=newsletters) पर जाएँ।

ब्राउज़र डेवलपर टूल का उपयोग करके, 'Elements' टैब में action=wpmlwelcomestats&security= खोजें और security का मान जाँचें। उदाहरण के लिए, यदि खोज परिणाम नीचे दिखाए अनुसार दिखाई देता है, तो 22b1ac0de6 नोट करें।
// ...
jQuery.getJSON(newsletters_ajaxurl + 'action=wpmlwelcomestats&security=22b1ac0de6', ajaxdata, function(json) {
// ...

नीचे दिए गए URL पथ के <SECURITY VALUE> अनुभाग में नोट किए गए security मान दर्ज करें और उस URL पर अनुरोध भेजें
http://localhost:8080/wp-admin/admin-ajax.php?action=wpmlwelcomestats&security=<SECURITY VALUE>&type=years&chart=bar&from=2024-12-31&to=2024-12-31&history_id=FOO%27+UNION+SELECT+(CONCAT((DATABASE()),%22-%22,(@@VERSION))),NULL+LIMIT+1,2+%23
उपरोक्त PoC में SQL इंजेक्शन भेद्यता उत्पन्न करने वाले URL का अनुरोध करते समय, /wp-content/plugins/newsletters-lite/wp-mailinglist-plugin.php फ़ाइल के अंदर ajax_welcomestats फ़ंक्शन कॉल किया जाता है।
इस बिंदु पर, अनुरोध पैरामीटर history_id को SQL क्वेरी स्ट्रिंग में एक शर्त खंड के रूप में सीधे संदर्भित किया जाता है और चर $history_condition के रूप में आरंभ किया जाता है। इस चर को बिना किसी एस्केप प्रसंस्करण के डेटाबेस क्वेरी में पारित किया जाता है।

इसलिए, चूँकि URL पैरामीटर history_id में दर्ज किए गए मानों के लिए कोई सत्यापन या एस्केप प्रसंस्करण नहीं है, SQL इंजेक्शन भेद्यता उत्पन्न होती है। (ध्यान दें कि URL पैरामीटर from और to भी अपर्याप्त इनपुट सत्यापन और एस्केप प्रसंस्करण के कारण SQL इंजेक्शन हमलों के लिए असुरक्षित हैं।)
URL पैरामीटरों में से,
history_idमें SQL इंजेक्शन पेलोड होता है, जो डेटाबेस नाम (DATABASE()) और संस्करण (@@VERSION) को क्वेरी करने की अनुमति देता है। उदाहरण के लिए, जबsecurityमान22b1ac0de6है, तो निम्नलिखित URL तक पहुँचें।
http://localhost:8080/wp-admin/admin-ajax.php?action=wpmlwelcomestats&security=22b1ac0de6&type=years&chart=bar&from=2024-12-31&to=2024-12-31&history_id=FOO%27+UNION+SELECT+(CONCAT((DATABASE()),%22-%22,(@@VERSION))),NULL+LIMIT+1,2+%23
URL अनुरोध प्रतिक्रिया की जाँच करते समय, आप पुष्टि कर सकते हैं कि history_id पैरामीटर के माध्यम से SQL इंजेक्शन भेद्यता के कारण डेटाबेस का नाम और संस्करण जानकारी उजागर हो गई है।
