
Technical write-up e prova de conceito para CVE-2023-46474, uma vulnerabilidade de execução remota de código no PMB <=7.5.3 via upload de arquivo sem restrições, incluindo etapas de reprodução e orientações de remediação.
CVE-2023-46474
| Vetor CVSS v3.1 | Pontuação CVSS v3.1 |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Descoberta durante um teste de intrusão por Marcus Reynaud da Devensys Cybersecurity
O script pmb/admin/convert/start_import.php é vulnerável a uma falha do tipo , o que permite obter execução de código arbitrário no servidor.
Unrestricted File Upload
O atacante deve antes obter acesso administrativo à plataforma para utilizar essa funcionalidade.
O script PHP não verifica a extensão do arquivo que é enviado pelo usuário e o armazena em um diretório acessível pelo servidor web, mantendo sua extensão. Assim, é possível enviar um script PHP e depois executá-lo visitando o local onde foi armazenado.
É possível reproduzir esse comportamento da seguinte forma:
Enviamos um arquivo em .php que contém o código que queremos executar no sistema. Aqui, executaremos o comando de sistema id.

Ao observar a resposta, podemos recuperar o nome do arquivo tal como ele foi gravado no servidor.

Para executar nosso código, basta visitar /pmb/temp/[nome_do_arquivo].php com um navegador.

O resultado do comando é retornado pelo servidor.
A causa dessa vulnerabilidade é a falta de controle sobre o arquivo antes de gravá-lo no disco:

Para corrigir essa vulnerabilidade, é necessário implementar um controle de extensões nos arquivos enviados pelos usuários.
Recomendamos usar um sistema de whitelist, que só permite determinadas extensões de arquivo.
Você também pode gravar o arquivo no disco omitindo a extensão (sabendo que se trata de um armazenamento temporário).
Também é possível gravar o arquivo em um diretório fora do escopo do servidor web, o que tornaria o arquivo inacessível na Internet, e o código não poderia ser executado.
As versões 7.5.4 e superiores não são vulneráveis; o script foi totalmente reescrito.