LatePoint 5.7.6以前に認証不要のアカウント乗っ取り脆弱性
WordPressの予約プラグインLatePointの5.7.6以前に、ログインなしで顧客アカウントのパスワードを書き換えられる脆弱性があり、予約サイトを公開している組織が対象です。該当版を使っているかを確認し、5.7.6より新しい版が出ていれば更新してください。
急ぎ度: 至急
CVSS v3は9.1で、認証も利用者の操作も要らずインターネット側から顧客の個人情報に届くうえ、5.7.6以前のすべての版が対象で修正版の番号もまだ確認できていないためです。
関係があるか
LatePointでオンライン予約を受け付け、顧客にアカウントを持たせているWordPressサイトが対象です。クリニック、サロン、教室など、予約と顧客情報を同じサイトで管理している組織が当てはまります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Appointment Booking Plugin-LatePoint | Calendar & Scheduling for WordPress | 5.7.6以前のすべての版 | 修正版の版番号は確認できていません。WordPress.orgのプラグインページとWordfenceの告知で、5.7.6より新しい版が出ているかを見てください。 |
確かめ方
- 1WordPressの管理画面でプラグイン一覧を開き、LatePointの版が5.7.6以下かを確認します。
- 2サーバーにWP-CLIがあれば、コマンドでも版を確認できます。
- 3LatePointの設定でwp_users_as_customersを有効にしているかも確認します。有効だと、顧客アカウントに結びついたWordPress側のアカウントにも被害が及びます。
- 4複数のサイトを預かっている場合は、すべてのサイトで同じ確認をします。
何が起きたか
LatePointの顧客向けパスワード再設定の窓口に、ログインしていない第三者が他人のパスワードを書き換えられる脆弱性が見つかりました。2026年11月7日に公表されたばかりで、5.7.6以前のすべての版が対象です。
原因は、データベースへの問い合わせ条件を組み立てるOsModel::build_conditions_query()にあります。この関数は、条件の値が特定の文字列(IS NULLとIS NOT NULL)と一致すると、値を安全に束縛せずSQL文へそのままつなげます。再設定用トークンの照合でこの経路が使われるため、トークンを知らなくても条件を通ってしまいます。分類はCWE-287(不適切な認証)です。
結果として、登録順でいちばん若いIDの顧客のパスワードが、攻撃者の望む値に上書きされます。その顧客の予約、注文、個人情報が見られる状態になります。
攻撃の流れ
-
1
窓口を見つける
予約サイトが公開している顧客向けの窓口に、ログインなしでアクセスします。
-
2
対象の特定
予約の受付処理から、顧客の名前とメールアドレスを引き出します。
-
3
再設定の準備
その顧客のパスワード再設定を起動し、変更を受け付ける状態にします。
-
4
パスワード上書き
トークンの照合をすり抜けて、顧客のパスワードを書き換えます。
-
5
アカウント利用
新しいパスワードでログインし、予約・注文・個人情報を閲覧します。
どう悪用されるか
悪用に認証は要りません。公開されているサイトにネットワーク越しでアクセスできれば足り、管理者や顧客の操作も要らず、攻撃の難度は低いと評価されています。
被害は、先頭の顧客アカウントの乗っ取りです。その顧客の予約、注文、氏名やメールアドレスなどの個人情報が見られます。wp_users_as_customersを有効にしている場合は、顧客に結びついたWordPressのsubscriberまたはcustomerロールのアカウントも乗っ取られます。CVSSの機密性と完全性の影響は高く、可用性への影響はありません。
今すぐやること
-
1
使用中の版を確認する
LatePointを入れているすべてのサイトで版を確認し、5.7.6以下なら対象として扱います。
wp plugin get latepoint --field=version -
2
修正版に更新する
WordPress.orgのプラグインページとWordfenceの告知を見て、5.7.6より新しい版が出ていれば、すぐに更新します。更新後は、予約フォームと顧客ログインの動作を確かめます。
-
3
パスワード変更の跡を調べる
公表当日の脆弱性ですが、念のため、最近の顧客のパスワード変更や再設定メールの送信、見覚えのないログインがないかを調べます。登録順でいちばん若いIDの顧客は、とくに先に見てください。
-
4
不審があればパスワードを再設定する
身に覚えのない変更が見つかった顧客は、パスワードを再設定して本人に連絡します。wp_users_as_customersを有効にしているサイトでは、結びついたWordPressアカウントのパスワードとロールも確認します。
修正版がないあいだのつなぎ
修正版を当てられない間は、予約の受付を止められるならLatePointを一時的に無効化するのが確実です。止められない場合は、WAFやホスティング事業者の機能で、顧客向けのパスワード変更の窓口(customer_cabinet__change_password)と予約開始の窓口(steps__start_from_order_intent)への不審なリクエストを遮断する方法があります。ただし、ベンダーが示した回避策ではなく、顧客のパスワード変更機能に影響する場合もあります。修正版が出るまでのつなぎとして扱ってください。
背景
LatePointは、WordPressサイトに予約の受付、カレンダー、顧客用のマイページを加えるプラグインです。顧客の名前、メールアドレス、予約履歴、注文情報が、会社のWordPressのデータベースに入ります。顧客が予約を変更したり、パスワードを再設定したりする窓口は、ログイン前から誰でも触れる場所にあります。
今回の問題は、値をSQLの条件文へそのままつなげるという、SQLインジェクションと同じ系統の誤りです。特別な文字列を条件として解釈してしまう実装の不備が、そのまま再設定トークンの検証をすり抜ける道になりました。
よくある質問
Q.5.7.5に更新して入力値の検査が強化された版なら、安全ですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| latepointAppointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress |
5.7.6 以前→ 記載なし |
記載なし |
この記録には修正版の版が載っていません。修正版の有無と版は、本文か参照URLのベンダーの勧告で確かめてください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress plugin for WordPress is vulnerable to Authentication Bypass via Account Takeover in all versions up to, and including, 5.7.6. This is due to the OsModel::build_conditions_query() function in lib/models/model.php comparing WHERE-clause values against the literal strings 'IS NULL' and 'IS NOT NULL' and concatenating a match directly into SQL without binding it as a parameter, a flaw that neither sanitize_text_field() nor the 5.7.5 is_scalar() hardening guard closes, since both pass the scalar sentinel through unchanged. This makes it possible for unauthenticated attackers to send params[password_reset_token]=IS NOT NULL to the public customer_cabinet__change_password AJAX route to match every non-null account_nonse value, resolving to the lowest-id customer and overwriting that customer's password to an attacker-chosen value — granting full access to their bookings, orders, and PII, and, when the wp_users_as_customers option is enabled, takeover of the linked WordPress subscriber or customer-role account. The attacker can first identify the target customer's email by sending params[order_intent_key]=IS NOT NULL to the public steps__start_from_order_intent route, which returns the name and email from the first matching order intent, and can then self-arm the required 15-minute password-reset freshness window by triggering a reset for that customer directly.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory