ACF Extendedに認証不要でコード実行の欠陥 0.9.2.8で修正
WordPress用プラグイン「Advanced Custom Fields: Extended」(PRO版を含む)に、ログインなしの訪問者が任意の投稿を書き換え、最終的にサーバー上でコードを実行できてしまう欠陥が見つかりました。0.9.2.8より前の版が対象で、ただし影響を受けるのは特定の設定のフォームを公開しているサイトです。0.9.2.8以降へ更新し、あわせてフォームの設定を点検してください。
急ぎ度: 早めに
深刻度はCritical(CVSS 9.0)ですが、悪用には特定の設定のフォームが必要で、実際の攻撃での悪用は現時点で確認されていないためです。ただし該当するサイトでは被害が大きく、更新を先送りできません。
関係があるか
WordPressにAdvanced Custom Fields: Extendedまたは同PROを入れているサイトが対象です。特に、訪問者が使えるフロントエンドのフォームで投稿の更新アクションを設定しているサイトが、実際に悪用されうる環境です。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Advanced Custom Fields: Extended(WordPress プラグイン) | 0.9.2.8より前の版 | 0.9.2.8 |
| Advanced Custom Fields: Extended PRO(WordPress プラグイン) | 0.9.2.8より前の版 | 0.9.2.8 |
確かめ方
- 1WordPressの管理画面で「プラグイン」→「インストール済みプラグイン」を開き、Advanced Custom Fields: Extended(PROを含む)が入っているか、版が0.9.2.8未満でないかを確認します。
- 2複数サイトを運用している場合は、各サイトで同じ確認を行います。ステージング環境や、使っていないのに残っているサイトも忘れずに確認してください。
- 3サイトの公開ページにプラグインのフォーム機能で作った投稿の作成・更新用フォームがあるかを確認します。あれば、そのフォームの「投稿の更新」アクションで、更新対象の投稿と投稿内容の両方が訪問者の入力値に結び付けられていないかを見ます。両方が結び付いていると、今回の条件に当てはまります。
- 4WP-CLIを使える環境では、次のコマンドでも版を確認できます。
何が起きたか
WordPressの入力フォームを作れるプラグイン「Advanced Custom Fields: Extended」とそのPRO版に、重大な欠陥が見つかりました。サイトの公開側(フロントエンド)に置いたフォームから投稿を更新するとき、本来必要な「その操作をしてよい権限があるか」の確認が行われていませんでした。そのため、ログインしていない訪問者でも、サイト上の任意の投稿を上書きできてしまいます。
上書きできる投稿には、このプラグイン自身がフィールドの定義(入力項目の設計情報)を保存している投稿も含まれます。この定義を書き換えられると、結果としてサーバー上で任意のコードを実行させられる状態につながります。弱点の分類はCWE-94(コードインジェクション)です。
ただし、誰のサイトでも直ちに悪用できるわけではありません。悪用には、投稿更新アクションの「更新対象」と「更新内容」の両方を、訪問者が送信した値に対応付けたフォームをサイトが公開していることが必要です。CVSSの攻撃の複雑さが「高」とされているのは、この条件のためと考えられます。開発元は0.9.2.8でこの問題を修正しています。
攻撃の流れ
-
1
フォームを探す
攻撃者は、投稿の更新アクションを持つ公開フォームがあるサイトを見つけます。
-
2
権限確認なし
ログインなしで送信した値により、対象の投稿と内容を指定できてしまいます。
-
3
定義を上書き
プラグインがフィールド定義を保存している投稿も書き換えの対象になります。
-
4
コード実行
書き換えられた定義が処理され、サーバー上で任意のコードが実行されます。
どう悪用されるか
悪用にログインは不要で、インターネット経由で行えます。利用者の操作も必要ありません。一方で、投稿更新アクションの更新対象と更新内容の両方が訪問者の送信値に対応付けられたフォームをサイトが公開していることが前提になります。この条件を満たさないサイトでは、同じ手口は成立しにくいとされています。
悪用された場合は、サイトの投稿の改ざんにとどまらず、サーバー上でコードを実行されます。CVSSでは機密性・完全性・可用性のすべてが「高」で、影響範囲も変わる(スコープ変更)と評価されています。サイトの乗っ取り、データベースの情報の漏えい、同じサーバー上の他のサイトへの波及などが想定されます。
現時点で、実際の攻撃での悪用が確認されたという公表はありません。また、悪用の見込みを示す指標(EPSS)の値も示されていません。
今すぐやること
-
1
プラグインを0.9.2.8以降に更新する
管理画面の更新、または配布元からの入れ替えで、Advanced Custom Fields: Extended(PROを含む)を0.9.2.8以降にします。本番に当てる前に、可能ならステージング環境で表示とフォームの動作を確認してください。更新前にファイルとデータベースのバックアップを取っておきます。
wp plugin list --name=acf-extended --fields=name,version,status -
2
公開フォームの設定を点検する
訪問者が使えるフォームのうち、投稿の更新アクションを持つものを洗い出します。更新対象の投稿を訪問者の入力値で決めたり、更新内容を訪問者の入力値に任せたりしている設定がないか確認し、あれば固定値にするか、フォーム自体を止めてください。
-
3
改ざんの痕跡を調べる
更新前に攻撃を受けていた可能性も考え、投稿の更新履歴、特にフィールド定義に当たる投稿に心当たりのない変更がないかを確認します。見慣れない管理者ユーザー、不審なファイル、予定外のスケジュール実行がないかもあわせて見てください。アクセスログで、フォームの送信先への不審な大量リクエストがないかも確認します。
-
4
不審な点があれば復旧手順に入る
コードを実行された疑いがある場合は、サイトを一時的に切り離し、管理者やDBの認証情報を入れ替え、クリーンなバックアップからの復旧を検討します。WordPressのソルトやキーの再生成も有効です。
すぐ更新できないとき
すぐに更新できない場合は、投稿更新アクションを持つ公開フォームを一時的に非公開にするか、そのフォームを設置したページを止めてください。悪用には該当フォームの存在が必要なため、ここを断つことでリスクを下げられます。更新対象や内容を訪問者の入力値に結び付けない設定への変更も有効です。ただし恒久的な対策は修正版への更新です。プラグイン自体を使っていないなら、無効化して削除してください。
背景
WordPressのサイトでは、プラグインが管理画面だけでなく公開ページのフォームにも機能を足します。Advanced Custom Fields系のプラグインは、投稿に独自の入力項目を足したり、サイト訪問者向けの入力フォームを作ったりするために使われます。公開側のフォームは、ログインしていない誰もが触れる入口になります。そのため、裏側の処理で「この人にその操作を許してよいか」を確認し損ねると、影響が大きくなります。
WordPressのプラグインでは、権限確認の漏れが原因で、ログインなしの訪問者が本来できない操作を行えてしまう欠陥が、これまでも繰り返し報告されてきました。プラグインはWordPress本体とは別に更新されるため、本体を最新にしていても、プラグインが古いままだと弱点が残ります。定期的にプラグインの一覧と版を確認することが、基本的な守りになります。
よくある質問
Q.フォーム機能を使っていなければ、影響はありませんか。
Q.PRO版も対象ですか。
Q.すでに攻撃されたかどうかは、どう調べればよいですか。
まだ分かっていないこと
- 実際の攻撃での悪用が確認されているかは公表されていません。KEV(悪用が確認された脆弱性の一覧)への掲載も確認できていません。
- 侵害の有無を判定するための具体的な痕跡(IoC)は公表されていません。最新の情報は、WPScanやGitHub Advisoryの告知を確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| CVE | Advanced Custom Fields: Extended |
0.9.2.8 未満 |
0.9.2.8 |
| CVE | Advanced Custom Fields: Extended PRO |
0.9.2.8 未満 |
0.9.2.8 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The Advanced Custom Fields: Extended WordPress plugin before 0.9.2.8, Advanced Custom Fields: Extended PRO WordPress plugin before 0.9.2.8 does not perform any capability check when updating a post through one of its front-end form actions, allowing unauthenticated visitors to overwrite arbitrary posts, including the ones in which the site stores its own field definitions, which in turn leads to arbitrary code execution on the server. Exploitation requires the site to publish a form whose post-update action maps both its target and its content to visitor-submitted values.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web contact@wpscan.com
- web nvd.nist.gov
- web wpscan.com
- web github.com