CVE-2026-17532 のDockerラボです。WordPressプラグイン Seraphinite Accelerator における未認証の反射型XSSが、ログイン済み管理者が細工されたリンクを1回開くだけでリモートコード実行に連鎖します。
詳細な解説: BLOG
python3 または php(エクスプロイトURLの生成にのみ使用 - exploit.sh はどちらか存在する方を使用します)docker compose down -v # 古いデータをクリーンアップ
docker compose up -d
docker compose logs -f wpcli
LAB READY が表示されるまで待ち、Ctrl-Cを押します。WordPressは http://127.0.0.1:8080 で稼働し、脆弱なプラグインが有効化され、ページキャッシュが有効になっています。
wpcli コンテナは一度だけ実行されるインストーラで、セットアップ後に終了します。これは正常な動作です。
http://127.0.0.1:8080/wp-admin で管理者としてログインします
adminadmin-lab-pw細工されたURLを生成し、同じブラウザで開きます:
./exploit.sh # または: ./exploit.sh http://127.0.0.1:8080
ページは約5秒間ハングします - これはプラグインの selfTest ブランチ内の文字通りの sleep( 5 ) であり、ラボの故障ではありません。その後、XSSが実行され、管理者セッションを使用してWebシェルを書き込み、シェルのURLをブラウザコンソールに記録します。
http://127.0.0.1:8080/wp-content/plugins/hello.php?c=id
または、?c= なしで開くと、対話型の入力ボックスが表示されます。
xss.js は管理者のセッションと同一オリジンで実行されるため、以下のことが可能です:
wp-admin/plugin-editor.php を GET し、HTMLから一度きりのエディタnonceを抽出します。admin-ajax.php に action=edit-theme-plugin-file を指定して POST し、PHP Webシェルを hello.php に書き込みます。なぜ hello.php なのか? それは非アクティブだからです。アクティブなプラグインを編集し、その変更がサイトを致命的エラーに陥れる場合、WordPressはエラーを検出してファイルを元に戻します。非アクティブなプラグインはそのチェックをスキップするため、シェルは書き込まれた状態で維持されます。書き込み可能な非アクティブなプラグインファイルならどれでも機能しますが、hello.php はWordPressにデフォルトで同梱されています。
スクリプト全体は細工されたURLにインライン化されているため、攻撃者サーバーは不要です。
docker compose down -v