flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026
WordPressの保存型XSS攻撃:2つのプラグインと1つの永続化チェーン
Patchstackは、WordPressの2つの保存型XSSを介して同じ侵入後インプラントを使おうとする試みを観測しました。両プラグインを更新し、永続化を調査してください。更新だけでは侵害済みサイトを修復できません。[1], [2], [3], [4], [5]
管理者が後から読む公開の意見箱を2つ想像してください。サイトが投稿を単なるテキストではなく実行可能なマークアップとして保存すると、管理者が開いたときに、そのブラウザー権限で動作するおそれがあります。報告によると、異なる2つのプラグインの欠陥が侵入口として使われ、その後、更新後もアクセスを保つ試みがありました。[1], [8], [9]
主要な概念と専門用語
同一オリジンのセッション- ブラウザーは同一オリジンのリクエストにサイトのセッションを自動で付与します。そのサイト内ですでに動作しているスクリプトは、HttpOnly Cookieを読み取らずにページ経由で操作できます。[1], [17], [18]
永続化- 初期の脆弱性を修正した後も残るアクセス手段です。未承認アカウントやファイルなどが該当し、プラグイン更新だけでは削除されません。[1]
フレームワーク対応
- このガイドで説明する弱点の CWE 参照: CWE-79
- OWASP Top 10:2025 — A05:2025 Injection
インシデントのタイムライン
Patchstackは同じ侵入後段階を使う試みを、まずWPC Product Bundles、翌日にNinja Forms経由で観測したと報告しました。分析は10月6日に公開されました。[1]
ステップ・バイ・ステップの攻撃フロー
ソースコード比較:脆弱 vs 堅牢化
これは汎用モデルではなく、Ninja Forms の Textarea::admin_form_element() におけるソースコード上の変更です。3.15.3 は保存済みの送信内容を textarea の HTML 本文へ直接補間していましたが、3.15.4 は出力前に esc_textarea() を適用します。これにより、この文脈で内容がマークアップとして解釈される境界を閉じます。この例は CVE-2026-94504 の Ninja Forms 側だけを示し、CVE-2026-93836 に対する WPC Product Bundles の修正ではありません。他の HTML 文脈では用途に合ったエスケープを使ってください。[13], [15], [16]
public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}エンジニアリング&システム堅牢化チェックリスト
- ✓CVE-2026-93836の修正には、WPC Product Bundlesを少なくとも8.6.7へ更新してください。2026年10月11日の確認時点でWordPress.orgが示す最新は8.7.4です。8.7.3の変更履歴には別のStored XSS対策も記載されていますが、このCVEとの関連は示されていません。最新バージョンを導入してください。CVE-2026-94504の修正にはNinja Formsを少なくとも3.15.4へ更新します。2026年10月11日の確認時点でWordPress.orgが示す最新は3.15.5です。3.15.5ではParagraph Text (Rich Text)フィールドの送信内容に対するStored XSS対策も追加されていますが、これは3.15.4のCVE修正とは別です。本番サイトすべてで両プラグインのインストール済みバージョンを確認してください。[2], [3], [4], [5]
- ✓脆弱なバージョンが外部公開されていた場合、復旧と判断する前に調査します。データベース上の管理者とダッシュボードを照合し、must-useを含む不審なプラグインを確認します。[1]
- ✓Web、WordPress、ホスティングのログで、不審な管理操作、プラグイン導入、注文やフォーム送信の閲覧中に行われた変更を調べます。[1]
- ✓FlawOpenの運用上の推奨事項:信頼できるインシデント対応手順で不正アクセスを除去します。封じ込め後に特権資格情報とWordPress認証ソルトを更新し、サイトからアクセスできる他の秘密情報も確認します。
- ✓FlawOpenの運用上の推奨事項:正常なバックアップを確保し、サービス再開前にデータベース、プラグインファイル、購入・フォーム処理を検証します。更新だけでは永続化が除去された証明になりません。
参考資料
- Patchstack — Four ways back in: the WordPress XSS campaign that hides its own admin account (2026-10-06)
- CVE-2026-93836 — CVE record (Wordfence CNA)
- CVE-2026-94504 — CVE record (Wordfence CNA)
- WPC Product Bundles for WooCommerce — WordPress.org changelog
- Ninja Forms — WordPress.org changelog
- Patchstack — WPC Product Bundles advisory
- NCSA Qatar — Cybersecurity advisories (October 7, 2026)
- Wordfence CNA — CVE-2026-93836 vulnerability record
- Wordfence CNA — CVE-2026-94504 vulnerability record
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-woosb.php
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-backend.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Submission.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Textarea.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: admin submission template
- Ninja Forms 3.15.3 to 3.15.4 changeset referenced by CVE-2026-94504
- Ninja Forms 3.15.4 のソース修正 — Textarea::admin_form_element()
- MDN — 同一オリジンポリシー