CVSS 9.8Critical

CVE-2025-14533: ACF Extendedの権限昇格(10万サイト影響)

概要

  • CVE: CVE-2025-14533
  • プラグイン: Advanced Custom Fields: Extended (ACFE)
  • 影響バージョン: 0.9.2.1以前のすべてのバージョン
  • 修正バージョン: 0.9.2.2
  • CVSS: 9.8 (Critical)
  • 認証: 不要(未認証で攻撃可能)
  • 種別: 権限昇格(ユーザー登録時のロール制限なし)
  • アクティブインストール数: 約10万件

ACF(Advanced Custom Fields)の拡張プラグインとして広く使われているACF Extendedに、未認証の攻撃者が管理者権限アカウントを作成できる深刻な脆弱性が発見されました。PoCはGitHubで公開済みであり、実際の悪用リスクは高い状態です。

このような権限昇格(Privilege Escalation)の脆弱性は、WordPressのエコシステムにおいて最も危険な部類に入ります。管理者権限を取得した攻撃者はサイト全体を掌握し、バックドアの設置、コンテンツの改ざん、個人情報の窃取など、あらゆる悪意ある操作が可能になるからです。

何が起きたか

ACF Extendedはカスタムフィールドの機能を大幅に拡張するプラグインで、フロントエンドフォームからのユーザー登録機能も提供しています。この機能を通じて、サイト管理者はWordPressの登録フォームをカスタマイズし、新規ユーザーの情報を柔軟に収集できます。

問題は insert_user 関数の実装にありました。この関数は、フロントエンドフォームから送信されたデータをもとに新規ユーザーを作成する際、割り当てるロール(役割)を適切に制限していませんでした。

通常、WordPressのユーザー登録では新規ユーザーに割り当てられるロールは subscriber(購読者)など、権限の低い役割に固定されます。しかしACF Extendedの insert_user 関数は、フォームデータに含まれる role フィールドをそのまま受け入れていました。

これにより、攻撃者はフォームを送信する際に role=administrator を指定するだけで、管理者権限を持つアカウントを作成できてしまいます。

攻撃が成立する条件は一つあります。対象サイトがACF Extendedのフォーム機能を使って、フォームの role フィールドをWordPressのユーザーロールフィールドにマッピングするよう設定していることです。この設定は特定のユースケース(例えば、ユーザーに複数のロールを選択させる会員サイト)で利用されるため、すべてのサイトが影響を受けるわけではありません。しかし、影響を受ける設定をしているサイトでは、完全な管理者権限の奪取が可能です。

攻撃の仕組み

攻撃手順は単純です。ACF Extendedのフロントエンドフォームが設置されているページを特定した後、攻撃者は以下のようなリクエストを送信します:

POST /wp-login.php?action=register HTTP/1.1
Host: target-site.com
Content-Type: application/x-www-form-urlencoded

acf[field_user_login]=attacker&acf[field_user_email]=attacker%40example.com&acf[field_user_password]=P@ssw0rd123&acf[field_user_role]=administrator

または、ACFフォームのエンドポイントに直接POSTする形式が取られることもあります:

POST /targeted-registration-page/ HTTP/1.1
Host: target-site.com
Content-Type: application/x-www-form-urlencoded

acf[field_user_login]=attacker&acf[field_user_email]=attacker%40example.com&acf[field_user_role]=administrator&_acf_nonce=...

サーバー側の insert_user 関数はロールの値をバリデーションせず、そのまま wp_insert_user() に渡します。WordPressのコアは送られてきたロール指定を信頼し、管理者権限を持つユーザーを作成してしまいます。

攻撃の本質は、信頼すべきでない入力値(フロントエンドフォームの role フィールド)をサーバー側でバリデーションせずに処理していたことです。適切な実装では、ユーザー登録時に割り当て可能なロールを許可リストで制限するか、フォーム設定に関わらず強制的に subscriber 以下のロールのみを割り当てるべきでした。

GitHubにはPoCが公開されており、スキャンと攻撃を自動化するスクリプトも出回っています。ACF Extendedを使用している設定のサイトを自動的に探索し、管理者アカウントを作成する試みが行われています。

実際の被害

約10万件のアクティブインストールのうち、フロントエンドユーザー登録フォームで role フィールドをマッピングしている設定のサイトが攻撃対象となります。この条件に当てはまるサイトの割合は限られますが、攻撃が成功した場合の被害は甚大です。

管理者権限を取得した攻撃者が実行できる操作:

  • バックドアPHPファイルのアップロードによる永続的なアクセス維持
  • サイト全コンテンツの改ざん・削除
  • 登録ユーザーの個人情報・メールアドレスの窃取
  • サイトを踏み台にした他のサイトへの攻撃
  • マルウェアの埋め込みによる訪問者への二次被害
  • WordPressのコア設定変更による追加のバックドア作成

特に危険なのは、攻撃が痕跡を残しにくい点です。正規のユーザー登録プロセスを利用しているため、ウェブサーバーのログには通常のHTTPリクエストとして記録されます。

修正と教訓

修正方法: ACF Extendedをバージョン0.9.2.2以降に更新することで本脆弱性は解消されます。修正版では、insert_user 関数がフォームから受け取るロールの値を、管理者が事前に許可した範囲内のみに制限するよう変更されました。

緊急対応が必要なサイト:

  1. バージョン0.9.2.1以前のACF Extendedを使用している
  2. かつ、フロントエンドのユーザー登録フォームを設置している
  3. かつ、フォームの role フィールドをWordPressのユーザーロールにマッピングしている

上記3条件が揃うサイトは最優先で対応が必要です。すでに不審なAdministratorアカウントが作成されていないか、ユーザー一覧を確認してください。

開発上の教訓:

  1. サーバーサイドバリデーションの原則: クライアントから送信されるすべてのデータは信頼しない。ロールのような権限に関わるフィールドは、サーバー側で許可リストによる検証が必須
  2. 最小権限の原則: ユーザー登録機能では、デフォルトで最低限のロールのみを割り当て、管理者権限は手動での昇格のみで付与する設計にすること
  3. 入力値の範囲制限: enumに相当する値(ロール、ステータス等)はコード側で有効な選択肢を明示的に定義し、それ以外を拒否すること

Nyambushでの検出

NyambushはWordPressサイトをスキャンし、インストールされているプラグインとそのバージョンを検出します。ACF Extended(バージョン0.9.2.1以前)が検出された場合、CVE-2025-14533として脆弱性の警告を表示します。

また、定期スキャンを設定することで、今後発見される新しい脆弱性についても継続的に監視できます。PoCが公開されてから実際の攻撃が始まるまでの時間は非常に短く、多くの場合24〜48時間以内です。定期的な自動スキャンと迅速なアップデート適用の組み合わせが、リスクを最小化する最善策です。

この記事をシェア:Xでポスト

あなたのドメインは安全ですか?

Nyambushで今すぐ無料スキャンして、セキュリティリスクをチェックしましょう。