WordPressのログイン画面の反射型XSS脆弱性CVE-2026-64638

カテゴリ
脆弱性の公表
タグ
国外
目次
  1. 脆弱性の内容
    1. ログイン画面でXSSが起きる仕組み
    2. 管理者を介したPHPの実行
    3. 連鎖が成り立つ条件
  2. 時系列
  3. 対象の製品と版
  4. 悪用の状況
  5. 修正と回避策
  6. 未公表の事項
  7. 注
  8. 出典
  9. 更新記録
  10. 関連記事

WordPressが2026年8月6日に公開したセキュリティリリース7.0.3は、pwn.aiが報告したログイン画面の認証前の反射型XSSを含む12件の脆弱性を修正した⁠[1]。発見したpwn.aiは、この認証前のXSSからリモートコード実行(RCE)に至る脆弱性の連鎖をXSS2Shellと名付けた⁠[13]。

脆弱性の内容

CVEレコードによると、攻撃者が用意した悪意ある第三者のサイトを介し、攻撃者の制御外の条件の下で、この脆弱性をRCEに発展させられる⁠[10]。それには、標的の被害者へのソーシャルエンジニアリングの成功と、被害者の明示的な操作が必要だ⁠[10]。

表1:CVE-2026-64638の評価
項目値資料
CVECVE-2026-64638(GHSA-52p2-r8wf-jcrf)⁠[1]
CVSS8.9(HIGH。CVSS v4.0、ベクトルはCVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H)⁠[10]
CWECWE-79(反射型XSS)⁠[10]
発見者とCNA発見者はPwn.ai、CNAはHackerOne(参照にHackerOneの報告3877102)⁠[10]
NVDの分析Awaiting Analysis⁠[11]

WordPressは告知で、ログイン画面のXSSの詳細をアドバイザリに載せたとした⁠[1]。WordPressはGitHubのwordpress-developリポジトリにもアドバイザリを掲載している⁠[5]。同じリリースでは、ほかの脆弱性も修正した⁠[1]。

  • 寄稿者権限以上の保存型XSS(4件)⁠[1]
  • ユーザー登録が有効なマルチサイトの権限昇格⁠[1]
  • パスワード保護投稿のコメントの漏えい⁠[1]
  • 投稿スラッグの列挙⁠[1]
  • コメントフィードのメモの漏えい⁠[1]
  • 投稿者権限以上のCSSインジェクション(Anthropicが報告)⁠[1]
  • メールアドレス確認フローの回避⁠[1]
  • URL検証のSSRF⁠[1]

pwn.aiの8月6日のブログでは、この脆弱性はアカウントが無くても悪用でき、1回の失敗したログインで攻撃者のJavaScriptをWordPressのオリジンで実行させる⁠[13]。ログイン中の管理者が相手なら、既定の全インストールでサーバーのRCEに至るとした⁠[13]。完全な連鎖を作るのに、オープンソースのモデルと複数エージェントのワークフローでほぼ4日間かかったと書いた⁠[13]。

ログイン画面でXSSが起きる仕組み

pwn.aiのブログによると、存在しないユーザー名でログインすると、wp-includes/user.phpのwp_authenticate_username_password()が、送られたユーザー名をsprintfでHTMLのエラーメッセージに入れる⁠[13]。ユーザー名はsanitize_user()の中でwp_strip_all_tags()(PHPのstrip_tags())を通るが、「<」の直後に空白があるとタグと認識されない⁠[13]。そのまま残った文字列はwp_admin_notice()を経てwp_kses_post()に渡り、KSESは空白を挟んだタグを許可された要素と解釈する⁠[13]。

ログイン画面は、パスワードの再設定を扱うため、プロフィール編集用のuser-profile.jsを読み込む⁠[13]。注入した要素にこのスクリプトのハンドラーが反応すると、ログイン画面に無い入力欄がどちらもundefinedになり、比較が真になる⁠[13]。ログイン画面で未定義のajaxurlを注入したid付きの要素で上書きし(DOM clobbering)、同じオリジンの任意のURLにPOSTさせる⁠[13]。

POSTの先でREST APIのJSONPの機能(_jsonp)を使って応答をJavaScriptとして返させると、jQueryがそれを評価し、WordPressのオリジンでスクリプトが動く⁠[13]。匿名のRESTが401を返す環境でも、_envelopeのパラメーターで外側の応答を200にできると書いた⁠[13]。JSONPのコールバックに使える文字にドットが含まれるので、別のウィンドウの要素のclickを呼べる⁠[13]。pwn.aiは、この研究が2022年にpwn.aiのブログで公表したSame Origin Method Execution(SOME)の手法を基にしたと説明した⁠[13]。

管理者を介したPHPの実行

pwn.aiが示した手順では、攻撃者のページが子ウィンドウを開き、元のウィンドウを管理者のアプリケーションパスワードの承認画面(authorize-application.php)に移す⁠[13]。子ウィンドウでログインの細工を送って承認ボタンを押させ、管理者のアプリケーションパスワードを攻撃者のsuccess_urlに送らせる⁠[13]。そのパスワードでREST APIからスクリプト入りのページを公開し、管理者のセッションでプラグインのアップロードのnonceを取ってZIPをアップロードする⁠[13]。プラグインは有効化しなくても、展開されたディレクトリのPHPファイルをURLで直接実行でき、検証ではwww-dataの権限でコマンドを実行した⁠[13]。

連鎖が成り立つ条件

トロント大学の情報セキュリティ部門は8月7日の勧告で、攻撃者が標的に細工したURLを要求させれば、サイト自身のオリジンでJavaScriptを実行できるとした⁠[6]。正規の機関のホスト名の上での認証情報の窃取、セッショントークンの窃取、標的の権限での同一オリジンの要求ができるとも書いた⁠[6]。XSSを越えて昇格するには、4つの条件がすべて同時に要るとした⁠[6]。

  • アプリケーションパスワードが有効であること(5.6以降の既定)⁠[6]
  • 標的が、既定のunfiltered_htmlとupload_pluginsの権限を持つ単一サイトの管理者であること⁠[6]
  • プラグインの保存先に書き込めること⁠[6]
  • ファイルの変更や、無効なプラグインのディレクトリからのPHPの直接実行を防ぐ強化が無いこと⁠[6]

このうち少なくとも1つを、管理型・強化済みのホスティングは満たさないことが多く、部局の基盤で自ら管理する設置はすべて満たすことが多いとした⁠[6]。完全な連鎖は本番の基盤ではなく隔離したローカルの環境で実証されたもので、管理された条件の下で証明されたものと位置付けるべきだとも書いた⁠[6]。

The Hacker Newsの8月7日の記事によると、pwn.aiが同誌に提供した本番環境の証拠はXSSまでだった⁠[18]。研究者は7.0.2の本番環境2つで、Cookieの無いブラウザーからログイン画面のXSSを再現したが、アプリケーションパスワードの作成、アップロード、PHPの実行は試みていない⁠[18]。完全な連鎖は別のローカルの7.0.2の環境で実証したと、同誌は報じた⁠[18]。研究者は同誌に、XSSからコード実行への経路はプラグインの導入や任意のZIPのアップロードなど複数あると話した⁠[18]。

目次へ

時系列

時系列
日付主体内容資料
2026年7月26日pwn.ai完全な連鎖を見つけて再現した⁠[13]
2026年7月27日pwn.ai、WordPressブラウザーでの証拠とPHP実行の証明を付けて報告し、WordPressがリスクを認めた⁠[13]
2026年8月6日WordPress7.0.3と各系の修正版、7.1 RC2を公開した⁠[1、3]
2026年8月6日-CVE-2026-64638が割り当てられ、報奨金が支払われた⁠[13]
2026年8月7日-協調した公開が行われた⁠[13]
2026年8月7日WordPress.org日本語告知の訳を掲載した⁠[4]
2026年8月7日CVE ProgramCVEレコードを公開した⁠[10]
2026年8月7日NISTNVDに登録した⁠[11]
2026年8月10日Imperva広範な活動の観測を公表した⁠[15]
2026年8月13日JPCERT/CCWeekly Reportに「WordPressに複数の脆弱性」を載せた⁠[12]

目次へ

対象の製品と版

WordPressは告知で、修正を必要に応じて、セキュリティ修正の対象となる全ブランチ(現在は4.7まで)にバックポートするとし、積極的にサポートするのは最新版だけだとした⁠[1]。

表2:系ごとの影響と修正版(件数は7.0.3で修正した12件のうち該当する数)
製品影響を受ける版修正版資料
WordPress 7.0系7.0.3より前の、積極的に保守されている全版7.0.3⁠[13]
WordPress 6.9系11件が該当6.9.6⁠[3]
WordPress 6.8系〜5.8系各系で8件が該当6.8.7・6.7.6・6.6.6・6.5.9・6.4.9・6.3.9・6.2.10・6.1.11・6.0.13・5.9.14・5.8.14⁠[3]
WordPress 5.7系〜4.7系各系で7件が該当5.7.16・5.6.18・5.5.19・5.4.20・5.3.22・5.2.25・5.1.23・5.0.26・4.9.30・4.8.29・4.7.34⁠[3]
WordPress 4.6以前-なし(セキュリティ更新を受けない)⁠[3]

CVEレコードの記載では、WordPressの全版が影響を受ける⁠[10]。

Hadrianは解説で、悪用できる範囲を6.4〜7.0.2とした⁠[14]。ログインのエラーがwp_kses_post()を通るのは表示がwp_admin_notice()に移ってからで、それより前の6.3以前では、残った文字列が再解釈されず無害なままだと説明した⁠[14]。WordPressが古い系まで修正を広げたのは予防のためで、6.4より前の版がこの経路で悪用できるからではないとした⁠[14]。

目次へ

悪用の状況

CISAのADPは8月7日、CVEレコードにSSVCの評価を付け、悪用(Exploitation)を「none」、自動化(Automatable)を「no」、技術的な影響(Technical Impact)を「total」とした⁠[10]。

トロント大学の8月7日の勧告では、公開の攻撃コードも実環境での悪用の報告も無く、CISAのKEVにも載っていなかった⁠[6]。技術的な解説と動画での実演は公開されている⁠[6]。Hadrianも、解説の公開の段階で実環境での悪用の報告は無いとした⁠[14]。

Impervaのブログによると、CVE-2026-64638を認証も操作も要らないRCEと表現すべきではない〔注1〕⁠[15]。Impervaはその後、広範な活動を観測したと報告した⁠[15]。

表3:Impervaが示した活動の内訳
項目値資料
狙われたサイト67か国の1万1,000超の異なるサイト。75%超が米国⁠[15]
記録した要求数十万件⁠[15]
活動に関わるツール95%超がGo製⁠[15]
狙われたサイトの業種ゲーム32%、教育26%、金融24%⁠[15]

Sn1perSecurityは、フィードの集約サイトが載せた、8月2日からランサムウェアの攻撃に使われたとする記述を誤りとした⁠[17]。この脆弱性は非公開で報告されたもので、修正と公開の前に攻撃が始まることはありえない⁠[17]。8月10日にKEVのカタログ(1,662件)を直接確かめたが、該当は無かった⁠[17]。同じ日の段階で、確認された実環境の悪用も、大規模なスキャンの観測も無いとした⁠[17]。

Sn1perSecurityの同じ記事によると、公開から72時間以内に約20数個の概念実証(PoC)のリポジトリが公開され、いくつかは完全な連鎖だった⁠[17]。pwn.aiもブログに、認証前のXSSのPoCのHTMLと、RESTの401を回避する変種、WAFを回避する変種を載せた⁠[13]。香港中文大学のITSCは注意喚起で、PoCが公開されたと書いた⁠[7]。

Hadrianは検知の手がかりとして、wp-login.phpへのPOSTでlogの値にエンコードした「<」が含まれることを挙げ、正規のユーザー名に括弧は入らないとした⁠[14]。多くの環境はログインのPOSTの本文を記録していないとも注記した⁠[14]。

表4:侵害の痕跡
種別値示した組織資料
リクエストの形wp-login.phpへのPOSTで、logの値に%3C(エンコードした「<」)を含むHadrian⁠[14]

目次へ

修正と回避策

WordPressは告知で、セキュリティリリースであることから、直ちにサイトを更新するよう勧めた⁠[1]。更新はWordPress.orgからのダウンロードか、ダッシュボードの「更新」から行え、自動バックグラウンド更新に対応するサイトはまもなく更新が始まるとした⁠[1]。

Cloudflareの8月7日のWAFのリリースは、Managed RulesetとFree RulesetにあるWordPressのXSSの規則のメタデータを、XSS2Shell(CVE-2026-64638)を示すように更新した⁠[16]。検知の挙動と動作(Block)は変わらない⁠[16]。

トロント大学は勧告で、深刻度をHigh(CVSS 8.9)、状態を「修正済み、直ちに更新」とした⁠[6]。strict-dynamicを使うnonce方式のCSPは実証された経路を防がず、CSPは代替の対策にならないと書いた⁠[6]。中央のパッチ管理の外にある学部・研究室・研究グループ・授業のサイトを優先するよう求めた⁠[6]。

表5:大学の注意喚起
組織内容公表日資料
香港中文大学特定の条件の下でPHPのリモートコード実行に発展し、サイトの完全な侵害に至りうるとした2026年8月10日⁠[7]
香港中文大学更新後に、アクセスログ、管理者アカウント、最近入れたプラグインとテーマ、変更されたファイル、予定されたタスク、想定外のデータベースの変更の確認を求めた2026年8月10日⁠[7]
法政大学管理画面にログインした状態で細工されたURLにアクセスすると、サイトの改ざん等につながる可能性があるとした-⁠[8]
法政大学侵害を受けていないか確かめたうえでの最新版への更新と、身に覚えのないログイン履歴・ファイル・プラグイン・テーマ・ジョブの確認を求めた-⁠[8]
湘南工科大学wp2shellと並べて挙げ、条件次第でサーバー上のコード実行に発展する恐れがあるとして、7.0.3以上への更新を求めた-(2026年8月10日更新)⁠[9]
湘南工科大学自動更新が有効でも失敗している場合があるとして、現在の版を自分で確かめるよう求めた-(2026年8月10日更新)⁠[9]

JPCERT/CCはWeekly Reportで、7.0.3の告知を情報源に挙げ、修正済みの版に更新することで解決すると書いた⁠[12]。Impervaは、公開後も脆弱なまま残ったシステムで、想定外の管理者の変更、アプリケーションの資格情報、プラグインの導入などを調べるよう勧めた⁠[15]。

目次へ

未公表の事項

  • WordPressが行った修正の内容(HelpHubは改訂したwp-login.php・wp-includes/kses.php・wp-includes/user.phpなど10個のファイルの一覧を示した⁠[3])
  • 7.0.3での強制の自動更新の有無
  • 侵害されたサイトの数
  • Impervaが観測した活動の主体

注

  • 〔注1〕英語のブログでは "zero-interaction unauthenticated RCE" と書かれている⁠[15]。

出典

当事者

関係組織

公的機関

  • [10]CVE Program『CVE-2026-64638』(2026年8月7日公開)
  • [11]National Institute of Standards and Technology『CVE-2026-64638』(2026年8月7日公開、2026年9月3日更新)
  • [12]一般社団法人JPCERTコーディネーションセンター『JPCERT/CC WEEKLY REPORT 2026-08-13』(2026年8月13日公開)

調査・観測

報道機関

更新記録

  • 2026年8月13日:公開した。
  • 2026年9月3日:NISTのNVDの項目(9月3日更新、出典11)を加え、NVDへの登録を「時系列」に、分析の状態を「脆弱性の内容」に加えた。
  • 2026年10月22日:Hadrianの解説(10月22日更新、出典14)を加え、悪用できる版の範囲を「対象の製品と版」に、実環境での悪用の報告の有無と検知の手がかりを「悪用の状況」に加えた。

目次へ