
Joomla एक्सटेंशन PhocaCommander फ़ाइल अपलोड क्रिया में Path Traversal के प्रति संवेदनशील है - CVSS 6.1
PhocaCommander ≤ 6.1.3 — प्रमाणित व्यवस्थापक वेबरूट के बाहर फ़ाइलें लिखता है
PhocaCommander में फ़ाइल अपलोड हैंडलर, हमलावर-नियंत्रित base64-एन्कोडेड folder पैरामीटर से गंतव्य पथ बनाता है, बिना किसी पथ कंटेनमेंट सत्यापन के। एक प्रमाणित व्यवस्थापक वेबरूट के बाहर उन मनमाने स्थानों पर फ़ाइलें अपलोड कर सकता है जो वेब सर्वर प्रक्रिया द्वारा लिखने योग्य हैं।
प्रयोगशाला में पुष्टि की गई: folder=Li4vLi4vLi4vdG1w (= ../../../tmp) के साथ अपलोड करने पर अपलोड की गई फ़ाइल के बाहर पर रखी जाती है — जिसका स्वामी है। प्रोडक्शन PHP-FPM वातावरणों में इसे जोड़कर रिमोट कोड निष्पादन प्राप्त किया जा सकता है।
/var/www/html//tmp/www-data| घटक | असुरक्षित | परीक्षण किया गया | सुधार |
|---|---|---|---|
| PhocaCommander | 1.0.0 – 6.1.3 | Joomla 5.4.7 + PhocaCommander 6.1.3 (PHP 8.2 / Apache) | 6.1.4 |
आवश्यक प्रमाणीकरण: व्यवस्थापक (सत्र + CSRF टोकन)
फ़ाइल: administrator/components/com_phocacommander/helpers/fileupload.php — realMultipleUpload()
realMultipleUpload() folder POST पैरामीटर को base64 से डिकोड करता है और इसे सीधे Path::clean() कॉन्कैटेनेशन में पास करता है, जिसे बिना किसी कंटेनमेंट जाँच के अपलोड गंतव्य के रूप में उपयोग किया जाता है।
FILEUPLOAD.PHP — असुरक्षित कोड
$folder = $app->getInput()->get('folder', '', '', 'string');
$folder = base64_decode($folder); // ← attacker-controlled
$path = JPATH_ROOT; // = /var/www/html
if (isset($folder) && $folder != '') {
$pathFolder = Path::clean($path . '/' . $folder . '/');
// e.g. Path::clean('/var/www/html/../../../tmp/')
// = '/tmp/' — outside the webroot, no error thrown
}
// ...
File::upload($file['tmp_name'], $pathFolder . strtolower($file['name']));
Path::clean() निर्देशिका विभाजकों को सामान्य करता है लेकिन ../ अनुक्रमों को हल या हटाता नहीं है। हल किया गया पथ बिना किसी आगे की सीमा जाँच के सीधे File::upload() को दिया जाता है।
अपलोड एक्सटेंशन अनुमति सूची
हैंडलर एक एक्सटेंशन अनुमति सूची (छवियाँ, दस्तावेज़, संग्रह, टेक्स्ट फ़ाइलें) लागू करता है और सर्वर-निष्पादन योग्य प्रकारों जैसे .php और .htaccess को ब्लॉक करता है। हालाँकि, अनुमति सूची द्वारा अनुमत कई फ़ाइल प्रकार — जिनमें शेल स्क्रिप्ट, क्रॉन जॉब परिभाषाएँ और कॉन्फ़िगरेशन अंश शामिल हैं — संवेदनशील OS पथों पर लिखे जाने पर महत्वपूर्ण नुकसान पहुँचा सकते हैं।
folder पैरामीटर में ट्रैवर्सल के माध्यम से /tmp में मनमानी फ़ाइल लेखनव्यवस्थापक लॉगिन पृष्ठ के माध्यम से प्रमाणित करें। किसी भी व्यवस्थापक पृष्ठ से Joomla CSRF टोकन प्राप्त करें — यह एक छिपे हुए फ़ॉर्म फ़ील्ड के रूप में दिखाई देता है या पृष्ठ स्रोत से निकाला जा सकता है।

folder पैरामीटर में ट्रैवर्सल के साथ फ़ाइल अपलोड करेंPOST /administrator/index.php?option=com_phocacommander&task=phocacommanderupload.multipleupload पर एक मल्टीपार्ट POST अनुरोध भेजें, जिसमें file फ़ील्ड में फ़ाइल सामग्री और folder फ़ील्ड में base64-एन्कोडेड ट्रैवर्सल पथ Li4vLi4vLi4vdG1w (= ../../../tmp) हो। सर्वर HTTP 200 और {"jsonrpc":"2.0","result":"OK","code":200,"message":"Success: ","details":"Files uploaded"} के साथ प्रतिक्रिया देता है।
अनुरोध / प्रतिक्रिया

फ़ाइल की पुष्टि /tmp/upload_test.txt पर होती है, जिसका स्वामी www-data है, और यह /var/www/html/ के बाहर है।

www-data द्वारा लिखने योग्य कोई भी पथ हमलावर-चयनित सामग्री प्राप्त कर सकता है, जिसमें OS शेड्यूलर, SSH डेमन और अन्य सेवाओं द्वारा उपयोग किए जाने वाले पथ शामिल हैं.txt फ़ाइल को .user.ini (auto_prepend_file) के साथ किसी वेब-सुलभ निर्देशिका में अपलोड करने से उस निर्देशिका के अगले अनुरोध पर PHP निष्पादन ट्रिगर होता है