セキュリティ 会社のPatchstackは2026年10月6日、WordPress の2つのプラグインの脆弱性 を使い、管理画面の一覧に出てこない管理者アカウントを作る攻撃を観測したと公表しました。対象は、フォーム作成の「Ninja Forms」(有効インストール50万以上)と、WooCommerceでセット商品を作る「WPC Product Bundles for WooCommerce」(同3万以上)です。
プラグインを更新しても、すでに作られたアカウントや裏口は残ります。この2つを使っているサイトは、更新とあわせて、侵入の跡がないかを確かめます。Ninja Formsの脆弱性と更新の手順は、Ninja FormsのXSS脆弱性CVE-2026-94504が悪用、3.15.5へ更新 に書きました。この記事では、Patchstackの分析で分かった攻撃の中身と、確かめ方をまとめます。
公式の資料で確かめられたこと
項目
内容
出どころ
公表
2026年10月6日。10月4日にWPC Product Bundlesへの攻撃、翌5日にNinja Formsへの攻撃を観測。どちらも同じ不正なJavaScriptを読み込ませる
Patchstack
脆弱性(1)
CVE-2026-93836。WPC Product Bundles for WooCommerce 8.6.6以前の保存型のクロスサイトスクリプティング(XSS )。ログインしていない攻撃者が送り込める
NVD、Patchstack
脆弱性(2)
CVE-2026-94504。Ninja Forms 3.15.3以前の保存型XSS
NVD、Patchstack
深刻度
どちらもCVSS 7.2(NVDに載っている、登録元Wordfenceの値)
NVD
修正版
WPC Product Bundlesは8.6.7、Ninja Formsは3.15.4
Patchstack、WordPress.orgの変更履歴
最新版(10月12日確認)
WPC Product Bundlesは8.7.4(10月7日)、Ninja Formsは3.15.5(9月28日)
WordPress.org
攻撃の量
Patchstackの観測では、まだ限られている。ただし、確認できた2件が上限ではないとしている
Patchstack
2つの脆弱性がNVDに載ったのは、どちらも9月22日です。Patchstackは、攻撃に使われたドメインが10月1日に登録されたと書いています。最初の攻撃の観測は10月4日です。
攻撃の流れ: 管理者が画面を開くと動く
保存型XSSは、攻撃者が送った内容がサイトに保存され、だれかがその画面を開いたときに、ブラウザーの中で動く脆弱性です。Patchstackによると、今回は次の場所に仕込まれました。
WPC Product Bundles: 注文の数量の欄。WooCommerceの注文のデータとして保存される
Ninja Forms: フォームの入力欄。送信データとして保存される
攻撃者はログインしません。注文や問い合わせを送るだけです。管理者が、受注や問い合わせを確かめるいつもの作業でその画面を開くと、不正なJavaScriptが動きます。
Patchstackの分析では、このJavaScriptは管理者のCookieを盗みません。管理者がログインしている画面の中で、管理者の代わりに操作を行います。そのため、CookieにHttpOnlyを付けていても防げないと説明しています。動きは次の順です。
攻撃者のサーバーに接続し、そのサイトでどこまで済んでいるかを確かめる
WordPressのプラグインのアップロードの機能を使い、不正なプラグインを入れる
新しい管理者アカウントを作る
不正なプラグインの中のファイルを呼び出し、隠すための仕掛けを入れる
結果を攻撃者のサーバーに報告する
1回の成功で、入口が4つ残る
Patchstackは、XSSが1回動くと、サイトに戻る入口が4つ残ると整理しています。
Patchstackの記事。XSSが1回動くと残る4つの入口の説明 出典: Patchstack「Four ways back in: the WordPress XSS campaign that hides its own admin account」 (引用)
入口
中身
管理画面から見えるか
管理者アカウント
WordPressのユーザーの新規追加の画面を使って作る
見える
隠された管理者アカウント
名前は「support」「updater」「maintenance」「backup」など、ありふれた約50語から選ぶ。メールアドレスは @wordpress.org
見えない
裏口のログインURL
wp-login.phpに特別なパラメーターを付けたURL。開いた人は、そのサイトでいちばん古い管理者としてログインした状態になる
見えない
認証 のないファイル管理
不正なプラグインのファイルに直接アクセスすると使える。ファイルの一覧、アップロード、削除、書き換えができ、パスワードは要らない
見えない(不正なプラグインは「WP Smart Thumbnails」の名前で入る)
隠された管理者と裏口のログインURLは、「must-useプラグイン」で動きます。Patchstackは、wp-content/mu-pluginsに置いたファイルは、すべてのアクセスで読み込まれ、管理画面からは無効にできず、プラグインの通常の一覧にも並ばないと説明しています。仕掛けはここにファイルを置き、隠したアカウントを、ユーザーの一覧と、管理者で絞り込んだ一覧と、一覧の上の件数から外します。
脆弱なプラグインを消しても、不正なプラグインを消しても、後ろの3つは残ると、Patchstackは書いています。
もう1つ、探しにくくする工夫があります。仕掛けは、置いたファイルの更新日時を、WordPressのフォルダの中でいちばん古い日時に書き換えます。「最近変わったファイル」を探す方法では、出てきません。
侵入されていないかの確かめ方
Patchstackが挙げている確認の場所は、次の5つです。
確かめる場所
見るもの
プラグインのフォルダ
wp-content/plugins/wp-smart-thumbnails/ があるか。表示名は「WP Smart Thumbnails」1.2.4、作者は「MediaPress Labs」
must-useプラグインのフォルダ
wp-content/mu-plugins/ に、class-wp-token-validate.php と、class-wp-query-(英数字8桁).php があるか
データベースの管理者
管理者をデータベースから直接出し、管理画面のユーザー一覧と比べる。データベースにだけ居るアカウントは、隠されている
データベースのオプション
wp_optionsに、fz_emer_done_v1 と fz_emer_login_tokens があるか。後者があれば、裏口のログインURLが生きている
Webサーバーのログ
imgcdn1[.]com、/fz/x.js、/fz/c.php の文字。wp-login.phpへの「_wplogin」付きのアクセス。wp-smart-thumbnails.phpへの直接のアクセス
管理者をデータベースから出すSQLは、Patchstackの記事に載っています。
SELECT u.user_login, u.user_email, u.user_registered
FROM wp_users u
JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%administrator%';
テーブルの接頭辞を「wp_」から変えているサイトは、テーブル名と「wp_capabilities」の「wp_」を、自分のサイトの接頭辞に読み替えます(編集部の補足)。
Patchstackは、攻撃の送信元のIPアドレスを5件載せていますが、うち4件はTorの出口で、IPアドレスを止めるだけでは長く効かないとしています。また、これらの指標は観測した攻撃のもので、2つの脆弱性の悪用のすべてを表すものではないと断っています。
見つかったとき
Patchstackは、管理者のブラウザーでXSSが動いたサイトは、侵害された可能性があるものとして扱うよう書いています。挙げている手順は次のとおりです。
身に覚えのないアカウントとプラグインを消す
mu-pluginsに置かれたファイルを消す
2つのオプション(fz_emer_done_v1、fz_emer_login_tokens)を消す。オプションだけ消しても、must-useプラグインが残っていると、新しいトークンが発行されうる
管理者の認証情報と、WordPressの認証用のキー(ソルト)を替える
ファイルとデータベースに、ほかの書き換えがないかを調べる
いちばん古い管理者のパスワードは、盗まれていなくても、漏れたものとして替える
サイトの保守を制作会社やサーバーの会社に任せている場合は、Patchstackの記事のURLを添えて、この確認を依頼します。
WPC Product Bundlesは8.7.4まで上げる
WPC Product Bundlesの変更履歴。8.6.7と8.7.3に修正の記載 出典: WordPress.org「WPC Product Bundles for WooCommerce」変更履歴 (引用)
WordPress.orgの変更履歴では、8.6.7に「Wordfenceのlhking氏から報告された脆弱性を修正」とあります。Patchstackは、この8.6.7がCVE-2026-93836の修正だと書いています。
変更履歴には、8.7.3にもセキュリティの修正があります。リクエスト、カートのセッション、注文の項目のデータから来るセット商品のIDを無害化して組み立て直し、保存型XSSを防ぐ、という内容です。この修正がどのCVEに当たるかは、変更履歴に書かれていません。10月12日時点の最新版は8.7.4なので、そこまで上げます。
Ninja Formsも、3.15.4のあとの3.15.5で別のXSSを修正しています。こちらも最新の3.15.5まで上げます。
書かれていないこと
侵入に成功したサイトの数と、日本のサイトの被害。Patchstackが書いているのは、攻撃の試みを観測したことと、取り出したプログラムの分析です
攻撃者がだれか
対象のプラグインが、この2つで終わるかどうか。Patchstackは、ほかに確認できたら記事を更新するとしています
2つのプラグインの開発元による注意喚起。Patchstackは、開発元の情報は変更履歴だけだと記載しています
影響する会社・しない会社
影響する: WooCommerceのECサイトで、WPC Product Bundles for WooCommerceを8.6.6以前のまま使っている会社です。
影響する: Ninja Forms 3.15.3以前で、問い合わせや採用のフォームを動かしている会社です。
確認が要る: 2つのプラグインをすでに更新した会社です。攻撃が観測された10月4日以降に、古い版のまま管理者が注文や送信データを開いていた場合は、仕掛けが残っているおそれがあります。
影響しない: WordPressを使っていない会社と、WordPressでもこの2つのプラグインを入れていない会社は、今回の2件の対象ではありません。
保守を外に任せている会社: 自社で作業はしなくても、保守の会社に版の確認と侵入の跡の確認を依頼します。
情シスが今日やること
自社と関連会社のWordPressのサイトを洗い出し、管理画面のプラグインの一覧で、2つのプラグインの有無と版を確かめる。
入っていれば、WPC Product Bundlesは8.7.4へ、Ninja Formsは3.15.5へ更新する。
「侵入されていないかの確かめ方」の5つの場所を確かめる。データベースやサーバーのファイルを自社で見られないときは、保守の会社に依頼する。
跡が見つかったら、「見つかったとき」の手順を保守の会社と進め、社内の事故対応の手順に沿って報告する。
注文や問い合わせの確認に、管理者の権限のアカウントを使っているかを確かめる。今回の仕掛けは、画面を開いた人の権限で動きます。確認の作業を権限の低いアカウントに分けられないかを検討する(Patchstackの記事にある対策ではなく、編集部の補足です)。