新たに公表されたCVE-2026-64638は、WordPress Coreのログイン画面に存在する認証前クロスサイトスクリプティングの脆弱性で、連鎖利用によりサーバー側での完全なリモートコード実行にまで発展します。CVSSスコアは8.9で、コードネームは「XSS2Shell」です。
PwnAI Researchによると、開始の山括弧とタグ名の間にスペースを挿入する手法(例: < area)を使うと、PHPのstrip_tags()パーサーがその文字列を無害なテキストとして扱ってしまうことが判明しました。
この不具合は、通常のログインページから始まります。存在しないユーザー名が送信されると、WordPressはwp_strip_all_tags()を通してエラーメッセージを生成します。
その一方で、WordPressの別のサニタイザーであるKSESは、後になって同じ文字列を正当なHTML要素として再解釈してしまいます。その結果、アカウントなしでも、攻撃者が操作可能な<area>、<div>、<button>といった実際に機能する要素をレンダリング後のページに密輸できてしまいます。
これらの注入された要素は、WordPress自身のuser-profile.jsファイルがページ読み込み時に自動的に検索するセレクタと一致します。これはパスワードリセット機能の名残です。
これによって自動クリックの連鎖が発生し、AJAXリクエストへとつながります。DOMクロバリング(DOM clobbering)を通じて、攻撃者が注入した要素がそのリクエストの送信先を乗っ取ります。
メソッドオーバーライドとJSONPのパラメータを使ってWordPressのREST APIに狙いを定めると、レスポンスは実行可能なJavaScriptとして包まれた形で返され、攻撃者は完全に未認証のままWordPressのオリジン内でスクリプトを実行できてしまいます。
PWN.aiの説明によれば、これ単体でも深刻な反射型XSSですが、RCEへとエスカレーションさせるには、ログイン済みの単一サイト管理者を攻撃者の用意したページに誘導し、一度クリックさせる必要があります。
研究者Paulos Yibelo氏が2022年に発表した同一オリジンメソッド実行(SOME)技術を土台に、pwn.aiの攻撃チェーンでは管理者のセッションを悪用してWordPressアプリケーションパスワードを生成します。
続いて、管理者のunfiltered_html権限を利用して攻撃者のJavaScriptを含むページを公開し、最終的にはPHP製Webシェルを含むプラグインZIPをアップロードします。これらはすべて正規の、認証済みWordPress API呼び出しを通じて行われます。
WordPress自身のアドバイザリは、このエスカレーション経路について慎重な姿勢を示しており、「攻撃者の制御が及ばない条件」に依存すること、そしてソーシャルエンジニアリングの成功と被害者の明示的な操作が必要であることを指摘しています。これが、このCVEが最大深刻度スコアを与えられなかった理由です。
修正はwp-includes/user.phpとwp-login.phpに適用され、esc_html()、esc_url()、esc_attr()の呼び出しを追加することで、パーサー間の解釈の不一致を解消しています。
WordPress 7.0.3には、他にも11件のセキュリティ修正が同梱されており、これらの修正内容はWordPress 7.1 RC2ブランチにも反映されています。
サイト運営者は直ちにWordPress 7.0.3へアップデートすべきです。自動バックグラウンドアップデートが有効な環境ではすでに適用されているはずですが、セルフホスト型のサイトでは手動対応が必要になることが多いので注意してください。
深刻度の高さを踏まえ、管理者は身に覚えのないアプリケーションパスワードや新たにアップロードされたプラグインについても、侵害の兆候として扱うべきです。攻撃チェーンが成功すれば、wp-config.php内のデータベース認証情報が漏えいしたり、Webサーバーの権限でOSコマンドが実行されたりする恐れがあるためです。
ANY.RUNのブラウザ内データ検査で、検知・調査・対応をより迅速に。フィッシングの可視性を完全に確保し、SOCを強化してMTTRを短縮しましょう