
WordPress Core の事前認証 (pre-auth) XSS-to-RCE チェーンに対する技術的分析と防御的緩和策。サニタイザーバイパス、DOM clobbering、JSONP 悪用、検出シグネチャ、パッチ適用を含みます。
CVE-2026-64638(XSS2Shell)の技術分析と防御的緩和マトリクス。WordPress Core の認証画面におけるパース処理の重大な不整合を悪用し、認証前の反射型 Cross-Site Scripting(XSS)をブラウザのプリミティブと連鎖させ、リモートコード実行(RCE)にまで到達させるものです。
このベクターの実際のリスクは、アプリケーションのコアに組み込まれた複数の正規ガジェットの組み合わせにあります。当初は中程度の影響(反射型XSS)として分類される発見は、以下の技術的な連鎖に沿ってサーバー完全侵害へと拡大します:
[ 事前認証リクエスト ] ➔ [ フィルタの不整合 ] ➔ [ DOM Clobbering ] ➔ [ JSONP REST APIコールバック ] ➔ [ 管理者操作 ] ➔ [ アプリケーションパスワード生成 ] ➔ [ プラグインアップロードによるRCE ]
エントリポイントは、ログイン画面(wp-login.php)における2つの内部入力サニタイズ関数間のロジックの不一致を利用します。一方が特定のHTMLエリアタグを無視する一方で、もう一方がそれを修正するため、ユーザー名パラメータ内の悪意のあるペイロードがログインエラーレスポンスのDOMに直接反映されることを可能にします。
WordPressはデフォルトで、ログインインターフェースにユーザープロファイルスクリプト(パスワードリセットフローに必要)を読み込みます。HTMLインジェクションはグローバル名前空間(window.ajaxurl)を改変し、正規の呼び出しを攻撃者が制御するエンドポイントへリダイレクトします。
内部REST APIの特定のパラメータ(_jsonp、_method=GET、_envelope=1)を使用することで、ブラウザはレスポンスをapplication/javascriptコンテンツとして解釈し、nonceベースの厳格なContent Security Policy(CSP)ディレクティブを迂回して任意の関数呼び出しを強制できます。
セッションを開いた管理者が影響を受けるオリジンとやり取りすると、ペイロードはその権限を利用して、バックグラウンドで自動的にアプリケーションパスワードを承認します。この二次的なAPI資格情報を使用して、悪意のあるプラグインがアップロードされ、PHP実行環境上でインタラクティブシェルが取得されます。
セキュリティパッチは、WordPressコアの全アクティブブランチに遡及して展開されました。サーバーにインストールされている正確なマイナーバージョンを確認してください。
| ブランチ | 影響を受ける最新バージョン | 修正バージョン(パッチ) | サポート状態 |
|---|---|---|---|
| 7.0 | 7.0.2 | 7.0.3 | 週次メインブランチ |
| 6.9 | 6.9.5 | 6.9.6 | セキュリティバックポート |
| 6.8 | 6.8.6 | 6.8.7 | セキュリティバックポート |
| 6.7 | 6.7.5 | 6.7.6 | セキュリティバックポート |
| < 4.7 | すべて | サポート対象外 | 🚨 重大リスク / サポート終了 |
WordPressコアを、お使いのブランチに対応するバージョンに直ちに更新してください。企業環境では自動更新システムにのみ依存しないでください。
# Forzar actualización de Core vía WP-CLI
wp core update --version=7.0.3 --force
直ちに環境を更新できない場合は、多層防御の制御を適用してエクスプロイトチェーンの上位リンクを断ち切ってください:
wp-config.php ファイルに define('DISALLOW_FILE_MODS', true); を追加し、Webインターフェースを介したコードのインストールや変更を制限します。wp-login.php リソースへのアクセスを、企業IPレンジまたは信頼できるVPNのみに制限します。パッチ適用前にインフラストラクチャが露出または攻撃されたかどうかを監査するには、アクセスログ(Access Logs)ファイルとファイルシステムを監査し、以下のパターンを探してください:
# Buscar intentos de inyección de caracteres HTML o payloads en el login
grep -E "wp-login\.php.*user_login=.*[<>]" /var/log/nginx/access.log
# Buscar llamadas a la REST API que fuercen parámetros de callbacks JSONP
grep -E "wp-json.*_jsonp=" /var/log/nginx/access.log
# Auditar llamadas inusuales de subida de complementos por parte de IPs desconocidas
grep "POST /wp-admin/update.php?action=upload-plugin" /var/log/nginx/access.log
/wp-content/plugins/ パス内に、認識されない、または非アクティブなプラグインに属する不審な、または最近作成された .php ファイルが存在するか確認してください。