
CVE-2025-0924 का तकनीकी विश्लेषण, जो WordPress के लिए WP Activity Log प्लगइन में एक Stored XSS भेद्यता है। इसमें root cause विश्लेषण, शोषण प्रदर्शन और remediation मार्गदर्शन शामिल है।
Stored XSS एक ऐसी भेद्यता है जिसमें दुर्भावनापूर्ण स्क्रिप्ट सर्वर पर संग्रहीत हो जाती है, और बाद में जब अन्य उपयोगकर्ता उस पृष्ठ को खोलते हैं तो वह स्वचालित रूप से निष्पादित होती है। यह CWE-79 (Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) के रूप में वर्गीकृत एक प्रकार का हमला है।
WordPress दुनिया भर में सबसे लोकप्रिय ओपन-सोर्स CMS (सामग्री प्रबंधन प्रणाली) है, जो वेबसाइट और ब्लॉग को आसानी से बनाने और प्रबंधित करने की सुविधा देता है। उपयोगकर्ता कोड ज्ञान के बिना भी विभिन्न प्लगइन्स और थीम के माध्यम से साइट का विस्तार और अनुकूलन कर सकते हैं।
WP Activity Log एक प्लगइन है जो WordPress साइट की प्रशासनिक गतिविधियों को ट्रैक और रिकॉर्ड करता है। यह व्यवस्थापकों के लिए साइट पर घटित विभिन्न घटनाओं की वास्तविक समय में निगरानी करने तथा सुरक्षा ऑडिट या समस्या निवारण के लिए लॉग उपलब्ध कराने में उपयोगी है।
CVE-2025-0924, WP Activity Log प्लगइन (5.2.2 और उससे निचले संस्करण) में 'message' पैरामीटर पर इनपुट सत्यापन की कमी और आउटपुट एस्केपिंग के अभाव के कारण उत्पन्न होती है। हम देखेंगे कि यह भेद्यता कैसे उत्पन्न होती है और इसके अनुसार प्रतिकार के उपाय तलाशेंगे।
WordPress में, जब उपयोगकर्ता साइट शीर्षक में दुर्भावनापूर्ण स्क्रिप्ट को कॉपी-पेस्ट करता है और यह परिवर्तन WP Activity Log 5.2.2 के माध्यम से लॉग हो जाता है, तो Stored XSS हमला होता है। उदाहरण देखते हुए हम जानेंगे कि WP Activity Log का उपयोग करके Stored XSS कैसे उत्पन्न होता है।
[चित्र 1] WordPress पोस्ट निर्माण, DB स्क्रिप्ट इंजेक्शन
[चित्र 1] में देखा जा सकता है कि प्रारंभ में लॉग निर्माण के लिए एक पोस्ट बनाई जाती है। इस प्रक्रिया में दो पोस्ट लिखी जाती हैं—एक को सीधे टाइप करके दर्ज किया जाता है, और दूसरी को कॉपी-पेस्ट करके दर्ज किया जाता है।पोस्ट बनाने के बाद डेटाबेस की जाँच करने पर, कॉपी-पेस्ट की गई पोस्ट के मामले में post_title फ़ील्ड का मान उचित रूप से sanitize (इनपुट मान की सफाई और फ़िल्टरिंग) किए बिना संग्रहीत होता हुआ देखा जा सकता है।
यह इस संभावना का संकेत देता है कि इनपुट विधि के आधार पर डेटा अलग-अलग तरीके से संसाधित किया जा सकता है, और यह XSS (क्रॉस-साइट स्क्रिप्टिंग) भेद्यता उत्पन्न होने का कारण बन सकता है।
[चित्र 2] WP Activity Log लॉग निर्माण और हमले की जाँच
[चित्र 1] में बनाई गई पोस्ट का विवरण WP Activity Log के लॉग में दर्ज रहता है। डेटाबेस से जानकारी लाकर More details... का अनुरोध करते समय [चित्र 2] में स्क्रिप्ट का निष्पादन देखा जा सकता है।
[चित्र 3] class-list-events.php - More details... return
जैसा कि [चित्र 3] में देखा जा सकता है, More details... AjaxInspector (ajax callback function / get metadata) और occurrence प्राप्त करके परिणाम आउटपुट करता है।
[चित्र 4] AuditLog.php -> AjaxInspector() - non sanitize
[चित्र 4] metadata sample
[चित्र 3] में देखा गया [चित्र 4] AjaxInspector, [चित्र 5] metadata के माध्यम से परिणाम उत्पन्न करते समय चर को sanitize किए बिना return करता है, जिससे यह भेद्यता उत्पन्न होकर समाप्त होती है।अब तक हमने WordPress सुरक्षा लॉग प्लगइन WP Activity Log के माध्यम से Stored XSS के बारे में जाना। यह भेद्यता तब उत्पन्न होती है जब उपयोगकर्ता पृष्ठ निर्माण और लॉग में स्क्रिप्ट सामग्री डाल सकता है। प्रतिकार उपाय के रूप में, WP Activity Log को 5.2.2 संस्करण से -> 5.3.0 में अद्यतन करने का प्रस्ताव है।
[चित्र 5] AjaxInspector परिवर्तन / esc_html() जोड़ा गया
इस मामले में, परिणामी HTML लौटाते समय esc_html() का उपयोग करके उचित रूप से sanitize न किए जाने के कारण समस्या उत्पन्न हुई प्रतीत होती है। परंतु यह विश्लेषण CVE-2025-0924 में वर्णित भेद्यता से सटीक रूप से मेल खाता है या नहीं, इसके बारे में अभी निश्चित नहीं हूँ।
वर्तमान में 5.3.0 संस्करण में अपग्रेड करने के बाद परीक्षण किया गया और उपाय किए जाने की पुष्टि हुई। परंतु CVE-2025-0924 में वर्णित भेद्यता Stored Cross-Site Scripting via the ##message## parameter के माध्यम से होती है, और class-alert.php, class-alert-manager.php को पथ के रूप में निर्दिष्ट किया गया है।
मेरे वर्तमान विश्लेषण में, समस्या message parameter में नहीं, बल्कि meta data में है। इस प्रक्रिया में समस्याग्रस्त पथ वाली PHP फ़ाइलें class-list-events.php और AuditLog.php हैं, इसलिए NIST के विवरण से मेल खाने वाला एकमात्र हिस्सा Stored Cross-Site Script है—बाकी सब कुछ भिन्न है। अतः सटीक मेल की पुष्टि के लिए अतिरिक्त जाँच की आवश्यकता है।