
Exploit de prova de conceito para CVE-2024-34832: directory traversal no painel administrativo do CubeCart levando a execução remota de código via parâmetro `_g` elaborado e arquivos `.inc.php` enviados.
No painel de administração, parâmetros como _g e node são usados para construir o caminho para incluir arquivos .inc.php e executar código PHP. Um usuário malicioso com a capacidade de enviar arquivos .inc.php em qualquer lugar do servidor pode explorar uma vulnerabilidade de traversal de diretório para incluí-los e executar código malicioso.
.inc.php em qualquer lugar do servidor (ex.: acesso a FTP, outra aplicação no mesmo servidor que permita upload de arquivos, novas vulnerabilidades nos recursos de upload do CubeCart, etc).Digamos que haja um servidor FTP rodando no mesmo servidor onde o CubeCart está instalado e um usuário consiga enviar arquivos para um local específico. No nosso caso, digamos que tudo que for enviado via FTP irá parar em /opt/FTP_Example.
Digamos também que este usuário enviou um arquivo chamado path_traversal.inc.php via FTP e seu conteúdo é o seguinte código PHP <?php system('whoami;id;hostname;ls') ?>.

Inicialmente não há perigo em enviar tal arquivo, pois ele não será executado nem está no diretório de um servidor web - como Apache - que pudesse executá-lo.
Este mesmo usuário pode ter privilégios muito limitados ou até nenhum privilégio no painel de administração do CubeCart, mas ainda pode fazer login. Por exemplo, criamos um usuário chamado julio que não tem nenhum privilégio.

Após fazer login na aplicação como julio, começamos a testar os parâmetros _g e node. Percebemos que esses parâmetros acrescentam .inc.php automaticamente ao final de um caminho e parecem usar include() nesse arquivo para executar código PHP.
Como visto abaixo, quando o arquivo não é encontrado, a seguinte mensagem de erro é retornada.

Começamos a nos perguntar se poderíamos percorrer o caminho e alcançar um arquivo .inc.php em um diretório em outro lugar do servidor - como nossa pasta FTP.
Como tínhamos um arquivo chamado path_traversal.inc.php na pasta /opt/FTP_Example, tentamos adicionar vários /../../../ até alcançar o diretório raiz, então adicionamos /opt/FTP_Example/path_traversal e a aplicação automaticamente adicionou .inc.php ao final do caminho.
Como visto abaixo, o código foi executado com sucesso.

Percebemos que o parâmetro node realmente escapa barras (/), mas _g não. Todos os parâmetros usados para construir caminhos devem escapar barras para evitar vulnerabilidades de traversal de diretório.
Embora existam pré-requisitos para a exploração bem-sucedida desta vulnerabilidade - o que reduz consideravelmente o risco - ela ainda se beneficia de um patch. Você pode verificar nas referências como os autores do CubeCart corrigiram esta vulnerabilidade e aplicar as correções à sua própria instância do CubeCart até que um lançamento oficial venha com ela já corrigida.