XSS2Shellとは — WordPressログイン画面の未認証XSSからPHPコード実行へ至る攻撃
「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段目:
wp_strip_all_tags()(内部はPHPのstrip_tags())
―<の直後にスペースを入れると(例:< area)タグと認識せず、無害なテキストとして素通しする。 - 2段目:
wp_kses_post()(WordPress独自のKSESパーサー)
― こちらはそのスペースを無視し、< areaを正当な<area>要素として復元する。しかも<area>は許可リストに含まれている。
結果として、「1段目がテキストと判断 → 2段目がHTMLとして復元」というズレにより、
攻撃者が指定したDOM要素がログイン画面に注入されてしまいます。これがXSS2Shellの入口です。
XSSからPHP実行までの連鎖
- 自動クリックの誘発 ― ログイン画面には(パスワードリセット用に)
user-profile.jsが読み込まれている。
注入したDOMが、このスクリプトが探す要素(.reset-pass-submit/.wp-generate-pw/#color-picker)に一致し、
クリックが自動発火する。ガード条件も存在しない要素の比較(undefined === undefined)で通ってしまう。 - DOM Clobbering ― 本来存在しない
ajaxurl変数を、注入した< area id=ajaxurl href=...>で乗っ取り、
任意URLへのPOSTリクエストを発生させる。 - REST JSONP でスクリプト実行 ― リクエストに
_jsonp=パラメータを付けてレスポンスをコールバックで包ませ、
jQuery のglobalEval()によりJavaScriptをWordPressオリジンで実行。_envelope=1を使えば匿名RESTが401を返す環境でも回避できる。 - SOME(Same Origin Method Execution) ― JSONPコールバックにドット(
.)が使えることを悪用し、
window.opener.approve.clickという連鎖で、別ウィンドウで開いたApplication Password承認画面の「承認」ボタンを、
管理者のセッションのまま自動クリックさせる。 - Application Password の奪取 ― 承認処理により発行されたアプリケーションパスワードが、攻撃者の
success_urlへ送られる。
これで攻撃者はREST APIをBasic認証で叩けるようになる。 - プラグインアップロードで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 以上へ更新すれば両方まとめて対策できますが、全サイトが実際に修正版になっているかを個別に確認してください。
運用面での緩和・注意
- 管理者への周知 ― RCE到達には管理者のクリックが必要なため、
「見覚えのないApplication Password承認画面や、外部から送られてきた不審なリンクは開かない」ことを管理者に徹底する。 - WAFでのブロック ― ログインリクエストに含まれる不審なペイロード(
<の直後にスペースを挟むパターンなど)や、
REST APIの_jsonp=・_envelope=パラメータを悪用するリクエストを検知・遮断する。ただし更新の代替にはならない。 - Application Password の点検 ― 身に覚えのないアプリケーションパスワードが発行されていないか、管理画面で確認する。
- 不審なプラグインの確認 ―
wp-content/plugins/に見覚えのないディレクトリやPHPファイルが追加されていないか点検する。
ペイロードの特徴:
この攻撃の核心は「< と タグ名のあいだのスペース」です(例:< 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 以上)への更新を全サイトで確認すること。管理者への注意喚起も有効。
参考情報:
- XSS2Shell: WordPress Preauth XSS to RCE Chain (CVE-2026-64638) — pwn.ai
- WordPress XSS2Shell: Unauthenticated Login-Screen XSS to PHP Code Execution — Hadrian
- New WordPress Pre-Auth XSS Could Lead to PHP Code Execution — The Hacker News
- WordPress 7.0.3 Release — WordPress.org
※本記事は公開情報をもとに作成した解説であり、不正確な情報が含まれる可能性があります。対応にあたっては必ず公式情報をご確認ください。
CONTACT
気になったら、
まず話しかけてください。
「まだ具体的な依頼ではないけど…」という段階でも大歓迎です。
現状のお悩みをお聞きするところから、一緒に考えます。
もちろん、相談は無料です。
- 相談・見積もり・費用感の確認、すべて無料
- しつこい営業・売り込みは一切しません
- 翌営業日以内にご返信します