
e107 CMS install.php में असुरक्षित डिसीरियलाइज़ेशन
रिपोर्ट किया गया: September 18, 2025
CVE निर्धारित: October 9, 2025
प्रकाशित: February 02, 2026
CVE ID: CVE-2025-61505
खोजकर्ता: Anas Abderrahman Benbarek
e107 CMS संस्करण 2.3.3 के इंस्टॉलेशन स्क्रिप्ट (install.php) में एक PHP ऑब्जेक्ट इंजेक्शन भेद्यता (CWE-502: अविश्वसनीय डेटा का डिसीरियलाइज़ेशन) पाई गई।
यह भेद्यता अप्रमाणित दूरस्थ हमलावरों को दुर्भावनापूर्ण क्रमबद्ध डेटा तैयार करने की अनुमति देती है, जो संभावित रूप से मनमाना कोड निष्पादन, डेटा हेरफेर, या अन्य दुर्भावनापूर्ण कार्यों की ओर ले जा सकती है — यह e107 कोडबेस या इसकी निर्भरताओं में शोषणीय गैजेट वर्गों की उपस्थिति पर निर्भर करता है।
यह समस्या PHP के unserialize() फ़ंक्शन के उपयोगकर्ता-नियंत्रित इनपुट पर बिना किसी प्रतिबंध (जैसे allowed_classes विकल्प) के असुरक्षित उपयोग से उत्पन्न होती है। हालांकि यह इंस्टॉलेशन चरण तक सीमित है, लेकिन खुले सर्वरों पर सेटअप के दौरान यह एक महत्वपूर्ण जोखिम उत्पन्न करता है, क्योंकि इंस्टॉलर डेटाबेस निर्माण और फ़ाइल लेखन जैसे संवेदनशील कार्यों को संभालता है।
install.php)e107 CMS इंस्टॉलेशन प्रक्रिया बहु-चरणीय है। उपयोगकर्ता इनपुट (भाषा, डेटाबेस क्रेडेंशियल्स, व्यवस्थापक विवरण, आदि) को चरणों में एक क्रमबद्ध सरणी का उपयोग करके संग्रहीत किया जाता है, जो previous_steps POST पैरामीटर में संग्रहीत होता है। यह डेटा प्रसारण के लिए base64-एनकोडेड होता है और सर्वर पर डीकोड/अनसीरियलाइज़ किया जाता है।
मुख्य समस्या डीकोड किए गए उपयोगकर्ता इनपुट को बिना सत्यापन, स्वच्छता, या वर्ग श्वेतसूची के unserialize() को सीधे पास करना है। यह दो स्थानों पर होता है:
if(isset($_POST['previous_steps']))
{
$tmp = unserialize(base64_decode($_POST['previous_steps']));
$override = (isset($tmp['paths']) && isset($tmp['paths']['hash'])) ? array('site_path'=>$tmp['paths']['hash']) : array();
unset($tmp);
}
स्क्रिप्ट मानती है कि previous_steps में पिछले फॉर्म चरणों से विश्वसनीय क्रमबद्ध डेटा है। लेकिन चूंकि यह एक सादा POST पैरामीटर है, एक हमलावर इसे पूरी तरह से नियंत्रित करता है। base64_decode() इनपुट को बाइनरी में बदलता है, और unserialize() इसे PHP ऑब्जेक्ट या सरणियों में पुनर्निर्मित करता है। यदि इनपुट में ऑब्जेक्ट नोटेशन (O: से शुरू) है, तो PHP उन वर्गों को इंस्टैंशिएट करता है यदि वे वर्तमान स्कोप में मौजूद हैं या ऑटोलोडेड हैं। यह तुरंत __wakeup() या अन्य मैजिक मेथड्स को ट्रिगर कर सकता है, संभावित रूप से फ़ाइल लेखन या अप्रत्याशित डेटाबेस कॉल जैसे दुष्प्रभाव पैदा कर सकता है यदि गैजेट चेन मौजूद हैं। शोषणीयता नोट: सफलता उपलब्ध गैजेट वर्गों पर निर्भर करती है। उनके बिना, प्रभाव क्रैश या डेटा भ्रष्टाचार तक सीमित हो सकता है।
if(isset($_POST['previous_steps']))
{
$this->previous_steps = unserialize(base64_decode($_POST['previous_steps']));
// ... (फ़िल्टरिंग और पासवर्ड पुनर्स्थापना तर्क)
unset($_POST['previous_steps']);
}
यह उदाहरण अधिक खतरनाक है क्योंकि डीकोड किया गया डेटा ऑब्जेक्ट स्थिति ($this->previous_steps) का हिस्सा बन जाता है और बाद के इंस्टॉलर कार्यों (MySQL सेटअप, व्यवस्थापक निर्माण, कॉन्फ़िगरेशन फ़ाइल जनरेशन) को प्रभावित करता है। यहां ऑब्जेक्ट इंजेक्शन इंस्टॉल प्रक्रिया में बना रह सकता है और उच्च-विशेषाधिकार वाले कार्यों को प्रभावित कर सकता है। फिर से, कोई allowed_classes प्रतिबंध नहीं होने का मतलब है कि कोई भी ऑटोलोडेड क्लास (कोर, हैंडलर, प्लगइन्स, लाइब्रेरी) को इंस्टैंशिएट किया जा सकता है। शोषणीयता नोट: वास्तविक दुनिया में शोषण के लिए आमतौर पर कई ऑब्जेक्ट्स को श्रृंखलित करने (एक "गैजेट चेन") की आवश्यकता होती है ताकि कोड निष्पादन जैसे खतरनाक व्यवहार तक पहुँचा जा सके। उदाहरण के लिए, एक वर्ग का __wakeup() दूसरी विधि को कॉल कर सकता है जो उपयोगकर्ता-नियंत्रित स्ट्रिंग्स का मूल्यांकन करती है। ऐसी श्रृंखलाओं के बिना, प्रभाव सेवा-अस्वीकार (जैसे, डिस्ट्रक्टर्स में संसाधन थकावट) तक सीमित रह सकता है। इंस्टॉलर का उच्च-विशेषाधिकार संदर्भ (e107_config.php लिखना, निर्देशिकाएँ बनाना) जोखिमों को बढ़ाता है, लेकिन इंस्टॉल के बाद स्क्रिप्ट को हटाने से दीर्घकालिक जोखिम कम हो जाता है। यह भेद्यता किसी भी सेटअप चरण के दौरान /install.php पर अप्रमाणित HTTP POST अनुरोधों के माध्यम से पहुँच योग्य है।
.htaccess, nginx नियमों का उपयोग करें या फ़ाइल को वेब रूट के बाहर ले जाएँ।unserialize() को json_decode() से बदलें, या कम से कम उपयोग करें:unserialize($data, ['allowed_classes' => false]);
अतिरिक्त अखंडता के लिए डेटा के HMAC हस्ताक्षर/सत्यापन जोड़ें।
e107 CMS आधिकारिक वेबसाइट: https://e107.org
e107 CMS GitHub रिपॉजिटरी: https://github.com/e107inc/e107
CVE रिकॉर्ड: CVE-2025-61505 (प्रकाशित होने के बाद अपडेट किया जाएगा)
CWE-502: अविश्वसनीय डेटा का डिसीरियलाइज़ेशन: https://cwe.mitre.org/data/definitions/502.html