BuddyFormsに認証不要で管理者を作られる脆弱性、修正版は未確認
WordPressのプラグインBuddyForms 2.10.5以下に、ログインなしで管理者アカウントを作られる脆弱性が公表されました。会員登録を開いているサイトは版を確認し、修正版がなければ登録機能を止めてください。
急ぎ度: 至急
CVSS v3は9.8で、ログイン不要のままサイト全体を奪われる脆弱性であり、2.10.5以下が対象なのに修正版を確認できていません。
関係があるか
会員登録やフォーム投稿のためにBuddyFormsを入れているWordPressサイトが対象です。問い合わせフォームだけの用途でも、プラグインが有効なら版の確認が要ります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| BuddyForms(WordPressプラグイン、Themekraft) | 2.10.5以下のすべての版 | 2.10.5より新しい版が出ているかは、プラグインの更新画面と開発元の告知で確認してください |
確かめ方
- 1WordPressの管理画面でプラグインの一覧を開き、BuddyFormsの版が2.10.5以下か確認します。
- 2設定の一般で、メンバーシップの「誰でもユーザー登録できるようにする」にチェックが入っているか確認します。
- 3公開ページにBuddyFormsのフォームを置いているか、固定ページと投稿を見て確認します。
- 4WP-CLIを使える環境なら、
wp plugin get buddyforms --field=versionで版を確認できます。
何が起きたか
BuddyFormsに、ログインしていない訪問者が管理者権限のアカウントを作れてしまう脆弱性が見つかりました。サイトが丸ごと乗っ取られる恐れがあります。
原因は、公開フォームの送信を受け付ける処理にあります。ログインなしの送信を許すかどうかを、対象フォームの公開設定だけで決めています。一方で、新しく作る投稿の種類は、送信者が指定した値をそのまま信じていました。2.10.2で入った照合は既存の投稿にしか働かず、新規作成では素通りします。
さらに、フォームの設定を保存する処理には、操作する人の権限確認も、フォーム管理画面用のnonceの確認もありません。そのため、訪問者が送った設定値が、新しく作られたBuddyFormsのフォーム設定として保存されます。弱点の分類はCWE-269(不適切な権限管理)です。
攻撃の流れ
-
1
公開フォームへ送信
ログインしていない攻撃者が、公開されているBuddyFormsのフォームに細工した送信をします。
-
2
偽のフォーム設定を作成
投稿の種類を偽ることで、新規ユーザーの権限を管理者に指定したフォーム設定がサイトに登録されます。
-
3
偽フォームで登録
その偽フォームを使って会員登録を送信し、新しいアカウントを作らせます。
-
4
管理者として操作
作られたアカウントでログインし、サイト全体を操作できる状態になります。
どう悪用されるか
攻撃者はログインする必要がなく、インターネット経由で、利用者の操作も要りません。ただし、サイトで「誰でもユーザー登録できる」設定が有効なことと、BuddyFormsの公開フォームが1つ以上ページに置かれていることが条件です。この2つはBuddyFormsの標準的な使い方だと説明されています。
悪用されると、管理者権限のアカウントを新しく作られ、サイトを完全に乗っ取られます。CVSSの機密性・完全性・可用性の評価がすべて高いのは、そのためです。
今すぐやること
-
1
版を確認する
BuddyFormsを使っているサイトを洗い出し、版が2.10.5以下か確認します。複数サイトを預かる場合は、すべてを対象にします。
wp plugin get buddyforms --field=version -
2
修正版を確認して更新する
プラグインの更新画面と開発元の告知で、2.10.5より新しい修正版が出ているか確認します。出ていれば、検証環境で動作を見たうえで本番を更新します。
-
3
修正版がなければ登録機能を止める
修正版が確認できない間は、回避策に書いた手順で、悪用の条件を崩しておきます。
-
4
不審なアカウントとフォームを調べる
管理者権限のアカウントに、心当たりのないものがないか確認します。BuddyFormsのフォーム一覧に、自分で作っていないフォームがないかも見ます。見つけたらアカウントを無効にし、管理者のパスワードを変更して、ログを保全します。
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
修正版がないあいだのつなぎ
修正版を当てられないときは、WordPressの設定の一般で「誰でもユーザー登録できるようにする」を外します。これで、悪用の条件の1つが崩れます。会員登録を止められないサイトは、BuddyFormsのフォームを置いた公開ページを一時的に非公開にするか、プラグインを無効化します。いずれも修正版が出るまでのつなぎです。
背景
BuddyFormsは、WordPressのフロントエンドに投稿フォームや会員登録フォームを作るプラグインです。管理画面に入れない一般の訪問者から、投稿やユーザー登録を受け付ける役割を持ちます。登録フォームには、新しく作るアカウントに与える権限(ロール)の設定も含まれます。この設定を書き換えられると、一般の会員向けの登録窓口が、そのまま管理者を作る窓口に変わります。
今回の脆弱性は、2.10.2で入った照合が既存の投稿にしか効いていなかったことが一因です。新規作成の経路は照合の外にあり、そこで種類の指定を信じる作りが残っていました。2.10.5以下という広い範囲が影響を受けるのも、この経路が残っていたからです。
よくある質問
Q.プラグインを無効化すれば、それで安全になりますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| themekraftBuddyForms |
2.10.5 以前→ 記載なし |
記載なし |
この記録には修正版の版が載っていません。修正版の有無と版は、本文か参照URLのベンダーの勧告で確かめてください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The BuddyForms plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 2.10.5 via a form-type confusion attack through the bf_post_type parameter. This is due to the public frontend submission handler buddyforms_form_response_no_ajax() authorizing logged-out submissions based solely on the target form's public_submit flag while independently trusting the attacker-supplied $_POST['bf_post_type'] to determine the post type of the newly created object — a cross-check introduced in 2.10.2 applies only to existing posts (post_id != 0) and is completely bypassed for new-object creation — combined with the save_post listener buddyforms_edit_form_save_meta_box_data() lacking both a current_user_can() capability check and a form-builder nonce, causing it to unconditionally persist attacker-supplied $_POST['buddyforms_options'] for any newly inserted buddyforms CPT post. This makes it possible for unauthenticated attackers to insert a rogue BuddyForms form configuration with an attacker-controlled new_user_role value into the live global form registry, then submit a registration through that form to create a new WordPress account with administrator-level privileges and achieve full site takeover. Exploitation requires the WordPress site to have "Anyone can register" enabled and at least one public BuddyForms form attached to a page, both of which are standard BuddyForms deployment configurations.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory nvd.nist.gov
- advisory github.com
- web wordfence.com
- web plugins.trac.wordpress.org
- web plugins.trac.wordpress.org
- web plugins.trac.wordpress.org
- web plugins.trac.wordpress.org
- web plugins.trac.wordpress.org
- web plugins.trac.wordpress.org
- web github.com
- web plugins.trac.wordpress.org
- web github.com