CVE-2025-14364: Demo Importer Plusのサイトリセット+権限昇格
概要
- CVE: CVE-2025-14364
- プラグイン: Demo Importer Plus
- 影響バージョン: 2.0.8以前
- 修正バージョン: 2.0.9
- CVSS: High(高)
- 認証: Subscriber権限以上のアカウントで悪用可能
- 種別: 認可不備(Missing Authorization)- サイトリセット + ロール乗っ取り
Demo Importer Plusは、WordPressサイトにデモコンテンツやテーマを一括インポートするためのプラグインで、約1万件のアクティブインストール数を持ちます。2025年11月、このプラグインにWordfenceバグバウンティプログラムを通じた報告(11月27日)により、Subscriber権限以上の認証済みユーザーが単一のリクエストでサイト全体をリセットし、管理者権限を奪取できる認可不備の脆弱性が発見されました。
何が起きたか
Demo Importer Plusは、管理者が新しいデモセットをインポートする前に既存のデモコンテンツを削除するための「サイトリセット」ワークフローをAJAXハンドラとして実装していました。このハンドラは管理者専用を想定した設計でしたが、実際には権限チェックが実装されていませんでした。
WordPressのwp_ajax_フックはログイン済みユーザーであれば誰でも呼び出せる仕組みになっており、権限チェックを省略すると任意のロールからアクセス可能になります。このプラグインはその確認を怠ったため、WordPressの最低ロールであるSubscriberを持つユーザーも、管理者専用のリセット操作を実行できる状態になっていました。ロールを限定するノンスや二段階確認といった追加の防御も存在していませんでした。
結果として、Subscriberが通常の認証済みリクエストだけで、本来は管理者のみが行える破壊的操作を実行できる完全な認可バイパスが成立していました。
攻撃の仕組み
この攻撃は特別なツールを必要とせず、手順はシンプルです。
-
Subscriberアカウントの取得: ユーザー登録を許可している一般的なWordPressサイトでは、攻撃者が無料でアカウントを作成できます。登録が制限されているサイトであっても、低権限のアカウントを何らかの方法で入手すれば十分です。
-
AJAXリセットリクエストの送信: 有効なセッションCookieを使い、攻撃者は
wp-admin/admin-ajax.phpに対して脆弱なアクション名を指定したHTTP POSTリクエストを送信します。管理者の認証情報は不要で、SubscriberのセッションCookieだけが受け付けられます。 -
サイトリセットの実行: プラグインはそのリクエストを管理者からのものとして処理します。すべての投稿、ページ、設定、ウィジェット、カスタマイズが削除され、データベースはプラグインのデモ初期状態に戻されます。
-
ロールの再割り当て: リセット処理の中でDemo Importer Plusは管理者ロールを再割り当てします。攻撃者はこのリクエストを操作し、自分自身のアカウントに管理者権限を割り当てることができます。
-
完全な制御の確立: 攻撃者はリセットされたサイトの管理者セッションを持ちます。プラグインのインストール、バックドアの設置、残存データの窃取、サイト全体のリダイレクトなど、あらゆる操作が可能です。外部バックアップが存在しない限り、元のサイトコンテンツは取り戻せません。
この一連の攻撃は、単一のHTTPリクエストで数秒以内に完了します。
実際の被害
この脆弱性の影響プロファイルが特に深刻なのは、2つの要因が重なるためです。
第一に、リセット操作は即座かつ不可逆であることです。通常の権限昇格攻撃は既存データへのアクセスを得るものですが、この攻撃はまずサイトを破壊してから管理者権限を取得します。管理者が侵入に気づいて攻撃者の新規権限を取り消しても、サイトコンテンツはすでに消失しています。回復には外部バックアップの存在が不可欠です。
第二に、オープンなユーザー登録が攻撃の敷居を大幅に下げることです。多くのWordPressサイトは会員コンテンツ、WooCommerceアカウント、フォーラム参加などの目的でビジターの登録を許可しており、そうした登録フローのいずれかで作成されたSubscriberアカウントが攻撃に十分です。
約1万件のアクティブインストールがあり、デフォルトでオープン登録を有効にしているサイトも多い状況では、露出は無視できません。バックアップ体制を整えていないサイトは、コンテンツの完全かつ永続的な消失というリスクに直面していました。
修正と教訓
修正: バージョン2.0.9で、AJAXハンドラにmanage_optionsケーパビリティチェックが追加されました。リセット操作を実行する前に、リクエスト元のユーザーが管理者権限を持つことを検証するようになっています。バージョン2.0.8以前を使用しているサイトは速やかに更新してください。
教訓:
-
AJAXハンドラには必ず権限チェックを: WordPressの
wp_ajax_システムにはデフォルトのロール制限が存在しません。すべてのハンドラはcurrent_user_can()を呼び出してアクセス制御を明示的に実装する必要があります。この確認を省略すると、ログイン済みの任意のユーザーがそのハンドラを呼び出せます。 -
破壊的操作には多重の防御を: データを永続的に変更または削除するアクションは、権限チェックに加えて、管理者の意図を記録したノンスや二段階確認を設けるべきです。シンプルな追加ステップが悪意のある起動や誤操作に対する有効なバリアになります。
-
低権限ユーザーも攻撃面: SubscriberはWordPressの最低ロールですが、認証済みアクセスを意味します。管理者専用の操作は、低権限ユーザーが期待されるUIフローしか使わないという前提に頼らず、明示的にロールを確認する必要があります。
-
バックアップは最後の防衛線: 攻撃が潜伏型ではなく破壊型の場合、回復能力はバックアップの状態に完全に依存します。自動化された、オフサイトの、定期的にリストアを検証するバックアップは本番WordPressサイトに不可欠です。
-
プラグインのスコープ拡大はリスクを高める: データベースのリセットやロールの再割り当てといったサイト状態管理を担うインポータープラグインは、主要なユースケース以上の攻撃面を持ちます。高権限操作をプラグインに組み込む場合は、WordPressコアと同等の厳しさで監査する必要があります。
Nyambushでの検出
Nyambushはインストール済みWordPressプラグインとそのバージョンを検出し、脆弱性データベースと照合します。Demo Importer Plusのバージョン2.0.8以前が検出された場合、NyambushはHigh(高)深刻度のファインディングとして報告し、2.0.9以降への即時更新を推奨します。
この脆弱性は管理者権限ではなくSubscriber権限で悪用できるため、ユーザー登録が有効なサイトでは特にリスクが高くなります。Nyambushのスケジュールスキャンはプラグインバージョンを継続的に監視し、CVE-2025-14364のような新規開示の脆弱性がデータベースに追加されるとすぐに検出できるため、インストールしているプラグインを手動で一つずつ確認する必要がありません。