
Joomla 6.1.3 - उच्च - रिमोट - ओवरराइट - मीडिया मैनेजर ओवरराइट अवशेष
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · joomla-media-override
वर्ग: विशेषाधिकार अवशेष पहुँच: रिमोट
Joomla CMS 6.1.3 (0f2d4de) - Open Source Matters
CVE-2026-48947 ने वेबसर्विस मीडिया API को सिखाया कि जब override सेट हो तो core.edit की आवश्यकता होनी चाहिए। साइट JSON API अभी भी ऐसा नहीं करता। डिफ़ॉल्ट Author के पास com_media पर core.create है और core.edit नहीं। साइट डिस्पैचर core.create को पर्याप्त मानता है और एडमिनिस्ट्रेटर ApiController लोड करता है। फिर postFiles() override को सीधे createFile() में पास कर देता है।
एक स्टॉक Author उस फ़ाइल को बदल सकता है जो पहले से डिस्क पर मौजूद है। विज़िटर उसी सार्वजनिक URL पर पहुँचते रहते हैं और नई बाइट्स प्राप्त करते हैं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष / अखंडता |
| पहुँच | रिमोट (डिफ़ॉल्ट Author, कोई API टोकन नहीं) |
| CWE | CWE-863, CWE-639 |
| CVSS | मध्यम: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N |
| उत्पाद | Joomla CMS |
| प्रभावित | 6.1.3 (0f2d4de4729eb951e0878fec98c7990da07915b2), साइट com_media JSON API |
| प्रमाणीकरण | डिफ़ॉल्ट Author (समूह 3)। कोई API टोकन नहीं। |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1 |
एक स्टॉक Author के रूप में लॉग इन करें और साइट पर पहले से मौजूद फ़ाइल को बदल दें। यह संग्रहीत मीडिया का विरूपण / बैट-एंड-स्विच है, साइट का अधिग्रहण नहीं। एक्सटेंशन डिनाइलिस्ट अपरिवर्तित है, इसलिए यह .php अपलोड नहीं है।
| विशेषाधिकार | विधि / पथ | प्रकार | लैब-प्रमाणित या अनुमानित |
|---|---|---|---|
| मौजूदा मीडिया फ़ाइल (लोगो, लेख छवि) को अधिलेखित करें | साइट POST /index.php?option=com_media&task=api.files&format=json&path=local-images:/ JSON override: true के साथ | अखंडता | लैब-प्रमाणित। HTTP 200, डिस्क SHA बदला, सार्वजनिक GET /images/joomla_black.png ने नया PNG परोसा जिसमें JOOMLA-MEDIA-OVERRIDE-WITNESS है |
| उस URL की ओर इशारा करने वाली किसी भी चीज़ को विरूपित करें | वही सार्वजनिक पथ, कोई कैश-बस्ट नहीं | अखंडता | सार्वजनिक बाइट्स के बदलने की लैब-प्रमाणित। images/ के अंतर्गत अन्य एडाप्टरों के लिए अनुमानित |
| एक नई अनुमत फ़ाइल बनाएँ | override के बिना वही POST | इच्छित | Author के पास com_media पर core.create है |
| PUT के माध्यम से संपादित करें | वही कार्य PUT, पथ में फ़ाइल नाम शामिल | लागू नहीं | लैब-प्रमाणित बंद। HTTP 403। putFiles() को पहले से ही core.edit की आवश्यकता है |
| नाम मौजूद होने पर बनाएँ, कोई override नहीं | POST override: false (डिफ़ॉल्ट) | लागू नहीं | लैब-प्रमाणित बंद। HTTP 409, override POST तक मूल SHA अपरिवर्तित |
.php या अन्य अस्वीकृत प्रकार अपलोड करें | createFile / isMediaFile डिनाइलिस्ट | लागू नहीं | अनुमानित बंद। यह लैब केवल PNG भेजती है |
| override के साथ वेबसर्विस मीडिया API को कॉल करें | /api/index.php/v1/media/files | लागू नहीं | अनुमानित बंद। MediaController::allowAdd जब override सेट हो तो core.edit की जाँच करता है (CVE-2026-48947) |
| Super User / RCE | लागू नहीं | लागू नहीं | बंद। Author, Author ही रहता है |
मैंने 2026-07/08 JSST लहर के बाद 6.1.3 को पिन किया। Groups API को पहले से ही core.admin की आवश्यकता है। वेबसर्विस मीडिया को override पर पहले से ही core.edit की आवश्यकता है। आंतरिक कंट्रोलर को अभी भी नहीं।
डिफ़ॉल्ट Author के पास com_media पर core.create है और core.edit में कुछ नहीं:
{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1}}
साइट Dispatcher core.create को गुज़रने देता है और एडमिनिस्ट्रेटर ApiController लोड करता है। फिर postFiles():
if (!$this->app->getIdentity()->authorise('core.create', 'com_media')) {
throw new \Exception(Text::_('JLIB_APPLICATION_ERROR_CREATE_RECORD_NOT_PERMITTED'), 403);
}
$override = $content->get('override', false);
if ($mediaContent) {
$name = $this->getModel()->createFile($adapter, $name, $path, $mediaContent, $override);
ठीक किया गया वेबसर्विस (api/.../MediaController.php):
if ($this->input->json->get('override', false)) {
return $user->authorise('core.edit', 'com_media');
}
पहले से दर्ज गलत रास्ते: PUT को अवशेष मानना (PUT पहले से ही 403 है); वेबसर्विस पथ को अभी भी खुला मानना (CVE-2026-48947 ने इसे बंद कर दिया); override के बिना 409 को चूक मानना (यह इच्छित create-if-absent पथ है)। नाटक: एक रिवर्स शेल। ओरेकल POST override 200 प्लस PUT 403 प्लस विटनेस PNG का सार्वजनिक GET है।
समान पिन अवशेष: levels API, menu items API, articles catid।
python3 joomla-media-override-Abraxas-Labs.py
या
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:19540। इमेज joomla:6.1.3-php8.3-apache प्लस mariadb:11.4।
SUCCESS joomla-media-override post-http=200 override=yes bytes-changed=yes put-http=403 no-edit=yes conflict-http=409 JOOMLA-MEDIA-OVERRIDE-WITNESS
createFile() से पहले ApiController::postFiles() के अंदर MediaController::allowAdd की तरह ही override -> core.edit जाँच। PUT को core.edit पर रखें।
0f2d4de4729eb951e0878fec98c7990da07915b2)ApiController.php postFilesGNU Affero GPL v3.0। देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।