Naimur Email OTPに乗っ取りの脆弱性、修正版未確認
WordPressのプラグインNaimur Email OTP Verification for WooCommerceの2.1.0以下に、認証なしでアカウントを乗っ取られる脆弱性があります。該当するサイトは版を確認し、修正版が確かめられるまで無効化を検討してください。
急ぎ度: 至急
CVSS v3が9.8で、認証なしにネットワーク越しで管理者を含むアカウントを乗っ取られる条件であり、修正版の公開も確認できていないためです。
関係があるか
WooCommerceで店舗を運営し、メールのOTPによる確認にNaimur Email OTP Verification for WooCommerceを入れているWordPressサイトが対象です。顧客アカウントだけでなく、管理者アカウントも乗っ取られるおそれがあります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Naimur Email OTP Verification for WooCommerce(WordPressプラグイン) | 2.1.0以下のすべての版 | 修正版は確認できていません。公開リポジトリには2.1.1のタグがありますが、修正版かどうかはベンダーの告知で確認が必要です。 |
確かめ方
- 1WordPressの管理画面でプラグイン一覧を開き、Naimur Email OTP Verification for WooCommerceが入っているか、版が2.1.0以下かを見ます。
- 2WP-CLIが使える環境では、次のコマンドで版と有効・無効の状態を確認できます。
- 3複数のサイトを預かっている場合は、無効化していてもプラグインのファイルが残っていないかを、サイトごとに確認してください。
何が起きたか
WooCommerce向けのメールOTP認証プラグインに、パスワード再設定の最後の手順で本人確認が不十分になる脆弱性が見つかりました。悪用されると、他人のパスワードが書き換えられ、そのアカウントでログインした状態のセッションまで攻撃者の手に渡ります。対象が管理者なら、サイト全体を奪われます。
このプラグインは、再設定の完了を許可するかどうかを、データベースに「確認済み」の記録があるかだけで決めています。記録に有効期限はなく、利用者のセッションとも、再設定ごとの使い捨てトークンとも結び付いていません。
しかも、再設定コードを入力したあとに手続きを途中でやめると、この記録が残ります。期限切れの記録を消す定期処理は登録されているものの、実行する処理が組み込まれておらず、掃除が一度も動かない作りです。つまり、古い記録がいつまでも有効なままになります。分類はCWE-287(不適切な認証)です。
攻撃の流れ
-
1
確認済みの記録が残る
利用者が再設定コードを確認したあと新しいパスワードを決めずにやめると、記録がデータベースに残り続けます。
-
2
必要な情報を集める
攻撃者は被害者のメールアドレスと、未ログインの訪問者に公開されているnonceを入手します。
-
3
最終手順を呼び出す
プラグインは記録の有無だけを見て、認証なしの要求を受け付けます。
-
4
パスワードを上書き
被害者のパスワードが書き換えられ、ログイン済みのセッションが返されます。
どう悪用されるか
認証は要りません。インターネット越しに、利用者の操作も介さず実行でき、攻撃の難易度は低いとされています。必要なのは被害者のメールアドレスと、プラグインがWooCommerceのアカウントページに載せるnonceです。このnonceは未ログインの訪問者にも見える状態で配られています。
狙われるのは、再設定コードを確認したのに、新しいパスワードをすぐには決めなかった利用者のアカウントです。確認済みの記録が消えないため、過去に再設定を途中でやめた利用者も、条件に当てはまる可能性があります。
成功すると、パスワードが上書きされ、そのアカウントとして使えるログイン状態も攻撃者に渡ります。顧客アカウントなら注文履歴や登録情報が見られ、管理者アカウントならプラグインの追加や設定変更を含め、サイト全体を操作されます。
今すぐやること
-
1
使っているサイトと版を洗い出す
管理しているWordPressサイトで、Naimur Email OTP Verification for WooCommerceが入っているかを確認します。2.1.0以下なら影響を受けます。
wp plugin list --name=naimur-email-otp-for-woocommerce --fields=name,status,version -
2
修正版の有無を確認して更新する
ベンダーの告知とプラグインの配布ページで、修正版が出ているか、どの版から直っているかを確かめます。公開リポジトリには2.1.1のタグがありますが、修正版かどうかは告知で確認してください。修正版と分かったら、更新して版を再確認します。
-
3
修正版を確認できないうちは無効化する
更新できない、または修正版が確認できない場合は、プラグインを無効化します。サイトの運用への影響は、下の回避策に書いたとおりです。
-
4
管理者と権限の高いアカウントを点検する
心当たりのないパスワード変更、不審なログイン、見覚えのない管理者アカウントがないかを調べます。見つかったら、パスワードの再設定とセッションの破棄を急いでください。
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
修正版がないあいだのつなぎ
プラグインを無効化します。メールのOTPによる確認が働かなくなるため、会員登録やログインの運用に影響が出ないかを先に確認してください。無効化できない場合は、攻撃を受けにくくする手段が見当たらないため、更新が確認できるまで該当サイトの公開範囲を絞ることも検討します。
背景
WooCommerceの顧客アカウントはWordPress本体のユーザーとして作られるため、店舗の会員と管理者が同じ仕組みの上に並んでいます。Naimur Email OTP Verification for WooCommerceは、メールに届くコードで本人確認をするプラグインです。顧客を守るための認証が、管理者のアカウントまで奪える入口になった点が、この脆弱性の特徴です。
この脆弱性は、コードの照合そのものではなく、確認後に残る状態の扱いにあります。確認済みの記録に期限がなく、掃除の処理も動かないため、時間がたつほど対象になるアカウントが積み上がる構造でした。
よくある質問
Q.修正版に更新したあと、パスワードを変える必要はありますか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| naimurrahmannahidNaimur Email OTP Verification for WooCommerce |
2.1.0 以前→ 記載なし |
記載なし |
この記録には修正版の版が載っていません。修正版の有無と版は、本文か参照URLのベンダーの勧告で確かめてください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The Naimur Email OTP Verification for WooCommerce plugin for WordPress is vulnerable to authentication bypass in versions up to, and including, 2.1.0. This is due to the plugin's password-reset finalization endpoint (the wp_ajax_nopriv_ceovw_update_new_password action handled by CEOVW_AJAX::update_new_password()) authorizing the reset solely by the presence of a database row marking an email as 'VERIFIED', with no timestamp check, no session binding, and no per-reset token — combined with mark_otp_as_verified_for_reset() leaving the row in that state after a user enters their code (abandoning the flow leaves the row behind), and a scheduled 'ceovw_cleanup_expired_otps_event' cron that has no add_action() handler anywhere in the plugin so cleanup never runs. This makes it possible for unauthenticated attackers to take over any account whose owner previously requested and verified a password-reset code and did not immediately finish choosing a new password — the attacker needs only the victim's email address and a nonce that the plugin itself localizes publicly into the CEOVW_APP global on the WooCommerce account page for logged-out visitors, after which they call the endpoint, overwrite the victim's password, and are returned a live wordpress_logged_in_ session cookie for that user (full site takeover if the account is an administrator).
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web security@wordfence.com
- web nvd.nist.gov
- web github.com