
SMS & OTP for WooCommerce、注文通知&放棄カート回復プラグイン(WordPress用);SMS Alert <3.9.6;未認証の権限昇格(強制パスワードリセット)

SMS Alert ≤ 3.9.5 - 任意のパスワードリセットによる未認証の権限昇格
WordPressプラグイン SMS Alert - SMS & OTP for WooCommerce, Order Notifications & Abandoned Cart Recovery における重大な認証不備の脆弱性。パスワードリセットでOTP検証が有効になっている場合、未認証の攻撃者が、電話番号を登録しているユーザー(管理者を含む)の新しいパスワードを、その電話の所持を証明することなく設定できる。
| CVE | CVE-2026-11387 |
| CWE | CWE-287: Improper Authentication |
| CVSS 3.1 | 9.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Vendor | Cozy Vision Technologies Pvt. Ltd. |
| Product | SMS Alert (sms-alert) |
| Affected | 3.9.5 までのすべてのバージョン |
| Patched | 3.9.6 (2026年6月27日) |
| CNA | Wordfence |
このリポジトリには、許可されたテスト専用のAbraxas Labsによる概念実証が含まれている - ベンダーへの開示、ラボでの再現、または評価する書面による許可を得たホストに対してのみ使用すること。
SMS AlertはWooCommerce / WordPressのパスワード紛失フローにフックし、SMSで送信されるワンタイムコードが新しいパスワードを制限する仕組みになっている。影響を受けるバージョンでは、option=smsalert-change-password-form の背後にあるハンドラが、呼び出し元がOTP検証を完了したこと、またはそのアカウントを所有していることを確認せずに smsalert_user_newpwd を適用してしまう。
公式のCVEレコードでは、同じIDチェックの欠如を利用して被害者のメールアドレスを変更し、通常のリセットを通じてアカウントを乗っ取ることも可能であると指摘されている。どちらの経路も未認証のアカウント乗っ取りである。
サイトが露出するのは、次の両方が真である場合のみである:
billing_phone)を保存している。これらの条件下では、影響は選択したアカウントの完全な侵害となる。管理者の乗っ取りはサイト全体の侵害である。
| 条件 | 結果 |
|---|---|
| 未認証のネットワークアクセス | WordPressの認証情報は不要 |
| 対象がショッパー / 購読者 | その顧客のアカウント乗っ取り |
| 対象が管理者 | wp-admin への権限昇格、プラグイン/テーマのインストール、永続的なマルウェア |
機密性、完全性、可用性はすべて高: 攻撃者は注文とPIIを読み取り、サイトのコンテンツとユーザーを変更し、正当な所有者を締め出すことができる。
SMS Alertを使用したパスワードリセットは、おおよそ次のようになる:
lost-password request → OTP to the user’s phone → verified change-password POST
壊れているのは最後のステップである。プラグインは $_REQUEST['option'] == 'smsalert-change-password-form' でルーティングし(3.9.5の class-wpresetpassword.php を参照)、送信されたパスワードを書き込む。このPOSTを、呼び出し元がリセットで指定されたユーザーであることを証明する事前のOTPセッション、nonce、またはケイパビリティチェックに結び付けていない。
この概念実証はそのハンドラに留まる:
wc_reset_password を設定してWooCommerceの /my-account/lost-password/ と /wp-login.php?action=lostpassword に POST し、被害者のユーザー名に対してプラグインのリセットパスに入る。option=smsalert-change-password-form と smsalert_user_newpwd / smsalert_user_cnfpwd を /、/my-account/lost-password/、およびwp-loginのlost-passwordアクションに POST する。password-reset=true を含む Location ヘッダーは成功として扱われる。wp-login.php を試し、ラボ実行で真の乗っ取りと失敗(OTPオプションがオフ、またはユーザーに電話番号がない)を区別できるようにする。OTPは送信されない。それがこのバグである。
CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py は小さなPython 3クライアントである: カラーバナー、そして上記の3つのステップ。コマンドラインで渡したURLにのみ通信する。
requestsHomebrew Python (PEP 668) を使用するmacOSでは、システムの pip install ではなくvenvを使用すること:
python3 -m venv .venv
.venv/bin/pip install requests
CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py <base_url> <victim_username> [new_password]
.venv/bin/python3 CVE-2026-11387-WooCommerce-SMS-OTP-Abraxas-Labs.py \
https://shop.example \
admin
3番目の引数は適用するパスワードを設定する。デフォルトは abr4x4s#L4b5 である。
引数なしの場合、スクリプトはバナーと使用方法を表示し、1 で終了する。これはクライアントが起動することを確認する安全な方法である。
対象のWordPressサイトはSMS Alert ≤ 3.9.5 を実行しており、リセット時のOTPが有効で、被害者のユーザー名にOTP用の電話番号が既に登録されている必要がある。パッチ適用済みの3.9.6+サイト、または電話番号のないユーザーに対しては、ログインチェックは失敗することが予想される。
所有していない、またはテストする書面による許可を持っていないホストに対してこれを実行しないこと。
wp-admin セッションを信頼できないものとして扱う。class-ultimatemember.php (Trac)研究および教育目的のみ。このリポジトリをホストする当事者と対象システムの所有者の両方から明示的な書面による許可を得ていない限り、この資料をいかなるホストに対しても実行、デプロイ、または使用しないこと。
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null