
Die Joomla-Erweiterung PhocaCommander ist anfällig für Path Traversal bei der Datei-Upload-Aktion – CVSS 6.1
PhocaCommander ≤ 6.1.3 — Authentifizierter Administrator schreibt Dateien außerhalb des Webroot
Der Datei-Upload-Handler in PhocaCommander erstellt den Zielpfad aus einem angreiferkontrollierten, base64-kodierten folder-Parameter ohne jegliche Pfad-Containment-Prüfung. Ein authentifizierter Administrator kann Dateien an beliebige Orte außerhalb des Webroot hochladen, die vom Webserver-Prozess beschreibbar sind.
Im Labor bestätigt: Das Hochladen mit folder=Li4vLi4vLi4vdG1w (= ../../../tmp) platziert die hochgeladene Datei unter — außerhalb von — im Besitz von . In Produktionsumgebungen mit PHP-FPM kann dies verkettet werden, um Remote Code Execution zu erreichen.
/tmp//var/www/html/www-data| KOMPONENTE | VERWUNDBAR | GETESTET MIT | BEHOBEN |
|---|---|---|---|
| PhocaCommander | 1.0.0 – 6.1.3 | Joomla 5.4.7 + PhocaCommander 6.1.3 (PHP 8.2 / Apache) | 6.1.4 |
Erforderliche Authentifizierung: Administrator (Sitzung + CSRF-Token)
Datei: administrator/components/com_phocacommander/helpers/fileupload.php — realMultipleUpload()
realMultipleUpload() dekodiert den folder-POST-Parameter aus Base64 und übergibt ihn direkt in eine Path::clean()-Verkettung, die dann ohne jede Containment-Prüfung als Upload-Ziel verwendet wird.
FILEUPLOAD.PHP — VERWUNDBARER CODE
$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() normalisiert Verzeichnis-Trennzeichen, löst ../-Sequenzen jedoch nicht auf und entfernt sie nicht. Der aufgelöste Pfad wird ohne anschließende Grenzprüfung direkt an File::upload() übergeben.
Zulassungsliste für Upload-Dateierweiterungen
Der Handler erzwingt eine Zulassungsliste für Erweiterungen (Bilder, Dokumente, Archive, Textdateien) und blockiert serverausführbare Typen wie .php und .htaccess. Viele Dateitypen, die von der Zulassungsliste erlaubt sind – darunter Shell-Skripte, Cron-Job-Definitionen und Konfigurationsfragmente – können jedoch erheblichen Schaden anrichten, wenn sie in sensible Betriebssystempfade geschrieben werden.
Authentifizieren Sie sich über die Admin-Login-Seite. Rufen Sie das Joomla-CSRF-Token von einer beliebigen Admin-Seite ab – es erscheint als verstecktes Formularfeld oder kann aus dem Seitenquelltext extrahiert werden.

Senden Sie eine Multipart-POST-Anfrage an POST /administrator/index.php?option=com_phocacommander&task=phocacommanderupload.multipleupload mit dem Dateiinhalt im Feld file und dem base64-kodierten Traversal-Pfad Li4vLi4vLi4vdG1w (= ../../../tmp) im Feld folder. Der Server antwortet mit HTTP 200 und {"jsonrpc":"2.0","result":"OK","code":200,"message":"Success: ","details":"Files uploaded"}.
ANFRAGE / ANTWORT

Die Datei wird unter /tmp/upload_test.txt, im Besitz von www-data, außerhalb von /var/www/html/ bestätigt.

www-data beschreibbare Pfad kann vom Angreifer gewählten Inhalt erhalten, einschließlich Pfaden, die vom OS-Scheduler, SSH-Daemon und anderen Diensten verwendet werden.txt-Datei mit PHP-Code in Kombination mit einer .user.ini (auto_prepend_file) in ein webzugängliches Verzeichnis löst bei der nächsten Anfrage an dieses Verzeichnis die PHP-Ausführung aus