
A extensão Joomla PhocaCommander é vulnerável a Path Traversal na ação de upload de arquivos - CVSS 6.1
PhocaCommander ≤ 6.1.3 — Administrador Autenticado Grava Arquivos Fora do Webroot
O manipulador de upload de arquivos no PhocaCommander constrói o caminho de destino a partir de um parâmetro folder codificado em base64 e controlado pelo atacante, sem qualquer validação de contenção de caminho. Um administrador autenticado pode enviar arquivos para locais arbitrários fora do webroot que sejam graváveis pelo processo do servidor web.
Confirmado em laboratório: ao enviar com folder=Li4vLi4vLi4vdG1w (= ../../../tmp), o arquivo enviado é colocado em — fora de — pertencente a . Em ambientes de produção com PHP-FPM, isso pode ser encadeado para obter execução remota de código.
/tmp//var/www/html/www-data| COMPONENTE | VULNERÁVEL | TESTADO EM | CORRIGIDO |
|---|---|---|---|
| PhocaCommander | 1.0.0 – 6.1.3 | Joomla 5.4.7 + PhocaCommander 6.1.3 (PHP 8.2 / Apache) | 6.1.4 |
Autenticação necessária: Administrador (sessão + token CSRF)
Arquivo: administrator/components/com_phocacommander/helpers/fileupload.php — realMultipleUpload()
realMultipleUpload() decodifica o parâmetro POST folder de base64 e o passa diretamente para uma concatenação em Path::clean(), que é então usada como destino do upload sem qualquer verificação de contenção.
FILEUPLOAD.PHP — CÓDIGO VULNERÁVEL
$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() normaliza os separadores de diretório, mas não resolve nem remove sequências ../. O caminho resolvido é passado diretamente para File::upload() sem nenhuma verificação adicional de limite.
Lista de permissões de extensões de upload
O manipulador aplica uma lista de permissões de extensões (imagens, documentos, arquivos compactados, arquivos de texto) e bloqueia tipos executáveis pelo servidor, como .php e .htaccess. No entanto, muitos tipos de arquivo permitidos pela lista — incluindo scripts de shell, definições de cron jobs e fragmentos de configuração — podem causar danos significativos quando gravados em caminhos sensíveis do sistema operacional.
Autentique-se pela página de login administrativo. Recupere o token CSRF do Joomla em qualquer página administrativa — ele aparece como um campo de formulário oculto ou pode ser extraído do código-fonte da página.

Envie uma solicitação POST multipart para POST /administrator/index.php?option=com_phocacommander&task=phocacommanderupload.multipleupload com o conteúdo do arquivo no campo file e o caminho de travessia codificado em base64 Li4vLi4vLi4vdG1w (= ../../../tmp) no campo folder. O servidor responde com HTTP 200 e {"jsonrpc":"2.0","result":"OK","code":200,"message":"Success: ","details":"Files uploaded"}.
SOLICITAÇÃO / RESPOSTA

O arquivo é confirmado em /tmp/upload_test.txt, pertencente a www-data, fora de /var/www/html/.

www-data pode receber conteúdo escolhido pelo atacante, incluindo caminhos usados pelo agendador do SO, daemon SSH e outros serviços.txt contendo código PHP combinado com um .user.ini (auto_prepend_file) para um diretório acessível pela web aciona a execução do PHP na próxima solicitação a esse diretório