セキュリティ WordPress

XSS2Shellとは — WordPressログイン画面の未認証XSSからPHPコード実行へ至る攻撃

対象CVE:CVE-2026-64638(CVSS 8.9・High) | 公表:2026年8月7日(米国時間) | 発見:pwn.ai

「XSS2Shell」は、WordPress本体(Core)のログイン画面に存在する未認証のクロスサイトスクリプティング(XSS)を起点に、
最終的にサーバー上でのPHPコード実行(RCE)まで到達する攻撃チェーンです。
先に公表された「WP2Shell」とは別の脆弱性で、修正版も異なります。

結論を先に:WordPress を 7.0.3 以上へ今すぐ更新してください。
修正は 4.7 まで遡ってバックポートされており、サポート中のほぼ全バージョンが対象です。
WP2Shell の対応(6.9.5 / 7.0.2)とは別件なので、片方だけでは不十分です。

1. XSS2Shell の概要

2026年8月7日(米国時間)、セキュリティ企業 pwn.ai が「XSS2Shell」(CVE-2026-64638)を公表しました。
WordPress のログイン画面(wp-login.php)に、認証不要で悪用できる反射型XSSがあり、
これを複数のテクニックで連鎖させることで、最終的にPHPコード実行に至ります。

WP2Shell との違い(重要):
WP2Shell は「サイトを見に来た不特定多数」と同じ立場から無条件・ワンショットでRCEが成立しました。
一方 XSS2Shell は、XSS部分こそ未認証で成立しますが、RCEまで到達するには「ログイン中の管理者が攻撃者の用意したページを開く(1クリックする)」ことが必要です。
ソーシャルエンジニアリングの要素が絡む点が大きな違いです。なお公表時点で、実環境での悪用は確認されていません。

2. どのように攻撃してくるのか(仕組み)

起点:2つのサニタイズ処理の「パーサーの食い違い」

wp-login.php で存在しないユーザー名を送信すると、WordPress は
「そのユーザー名は登録されていません」というエラーメッセージに、送信された文字列をそのまま埋め込んで返します。
ここで、2段階のサニタイズ処理のあいだにある認識のズレが悪用されます。

結果として、「1段目がテキストと判断 → 2段目がHTMLとして復元」というズレにより、
攻撃者が指定したDOM要素がログイン画面に注入されてしまいます。これがXSS2Shellの入口です。

XSSからPHP実行までの連鎖

  1. 自動クリックの誘発 ― ログイン画面には(パスワードリセット用に)user-profile.js が読み込まれている。
    注入したDOMが、このスクリプトが探す要素(.reset-pass-submit/.wp-generate-pw/#color-picker)に一致し、
    クリックが自動発火する。ガード条件も存在しない要素の比較(undefined === undefined)で通ってしまう。
  2. DOM Clobbering ― 本来存在しない ajaxurl 変数を、注入した < area id=ajaxurl href=...> で乗っ取り、
    任意URLへのPOSTリクエストを発生させる。
  3. REST JSONP でスクリプト実行 ― リクエストに _jsonp= パラメータを付けてレスポンスをコールバックで包ませ、
    jQuery の globalEval() によりJavaScriptをWordPressオリジンで実行。_envelope=1 を使えば匿名RESTが401を返す環境でも回避できる。
  4. SOME(Same Origin Method Execution) ― JSONPコールバックにドット(.)が使えることを悪用し、
    window.opener.approve.click という連鎖で、別ウィンドウで開いたApplication Password承認画面の「承認」ボタンを、
    管理者のセッションのまま自動クリック
    させる。
  5. Application Password の奪取 ― 承認処理により発行されたアプリケーションパスワードが、攻撃者の success_url へ送られる。
    これで攻撃者はREST APIをBasic認証で叩けるようになる。
  6. プラグインアップロードでPHP実行 ― 奪った認証情報で悪性プラグイン(ZIP)をアップロード。
    wp-content/plugins/ に展開されたPHPファイルは有効化しなくてもURL直アクセスで実行できるため、Webシェルとして機能する。

ポイントは、4〜6のRCE到達部分には「ログイン中の管理者が攻撃者のページを開く」という一手が必要だという点です。
逆に言えば、XSS単体(1〜3)は管理者の操作なしに未認証で成立してしまいます。

3. 影響を受けるバージョン

項目内容
CVE番号CVE-2026-64638
深刻度High(CVSS 8.9)
影響範囲7.0.3 より前の、サポート中の全WordPressバージョン(修正は 4.7 まで遡ってバックポート)
修正版WordPress 7.0.3(2026年8月6日リリース)
アドバイザリGHSA-52p2-r8wf-jcrf
実環境での悪用公表時点で確認なし

4. 対応策

根本対策:WordPress本体を 7.0.3 以上へ更新する

根本対策は、WordPress Core を 7.0.3 以上へ更新することです。
7.0.3 では、エラーメッセージ生成部に esc_html() / esc_url() / esc_attr() を追加し、
パーサーの食い違いによるXSSを塞いでいます。修正は 4.7 まで遡って提供されているため、古いブランチを運用中でも対応する更新版があります。

複数サイトを運用している場合の注意:
XSS2Shell(7.0.3)と WP2Shell(6.9.5 / 7.0.2)は別々の脆弱性です。
最新の 7.0.3 以上へ更新すれば両方まとめて対策できますが、全サイトが実際に修正版になっているかを個別に確認してください。

運用面での緩和・注意

ペイロードの特徴:
この攻撃の核心は「< と タグ名のあいだのスペース」です(例:< area id=...>)。
ログイン試行のパラメータ(log など)に、このような不自然な文字列が含まれるリクエストは要注意です。

5. まとめ

  • XSS2Shell(CVE-2026-64638)は、WordPressログイン画面の未認証XSSを起点に、PHPコード実行まで至る攻撃チェーン。CVSSは 8.9(High)。
  • 原因は wp_strip_all_tags() と wp_kses_post() のパーサーの食い違い。< の直後のスペースが片方だけをすり抜ける。
  • XSS→DOM Clobbering→REST JSONP→SOME→Application Password奪取→プラグインアップロード、という連鎖でRCEに到達する。
  • XSS単体は未認証で成立するが、RCEには「ログイン中の管理者が攻撃者のページを開く」一手が必要。この点がWP2Shellとの大きな違い。
  • 影響は 7.0.3 より前のサポート中の全バージョン。根本対策は 7.0.3 以上への更新のみ。
  • WP2Shell とは別件のため、両方の対策として最新版(7.0.3 以上)への更新を全サイトで確認すること。管理者への注意喚起も有効。

参考情報:

※本記事は公開情報をもとに作成した解説であり、不正確な情報が含まれる可能性があります。対応にあたっては必ず公式情報をご確認ください。

この記事の著者
丸山純一郎

丸山純一郎

Web戦略士

1998年のWeb黎明期からホームページ制作を開始。東京にてマークアップエンジニアからスタートし、テクニカル・ディレクター、Webディレクター、クリエイティブ・ディレクターとしてキャリアを積む。電通・博報堂などの広告代理店を通じたナショナルクライアント案件を多数経験。現在は新潟県長岡市を拠点に、Webストラテジストとして中小企業・個人事業主のWeb戦略を支援。SEO・広告・解析・システム開発・AI開発まで一気通貫で担当するほか、セミナー講師・専門記事の執筆も行う。

保有資格

ウェブ解析士 / GAIQ / 生成AIパスポート

CONTACT

気になったら、
まず話しかけてください。

「まだ具体的な依頼ではないけど…」という段階でも大歓迎です。
現状のお悩みをお聞きするところから、一緒に考えます。
もちろん、相談は無料です。

  • 相談・見積もり・費用感の確認、すべて無料
  • しつこい営業・売り込みは一切しません
  • 翌営業日以内にご返信します

無料相談受付中

平日 9:00〜18:00

無料で相談してみる

フォームに送信いただくだけでOK。
電話対応が苦手な方もお気軽にどうぞ。

26年 Web制作経験
Web戦略士ウェブ解析士資格保有
無料相談 お気軽にどうぞ