Answer in brief
CVE-2026-104012 records a High severity (CVSS 8.8) vulnerability in Rox Appointment Booking <= 1.3.1 - Unauthenticated Privilege Escalation via Mass Assignment to Mass Assignment via '/public/booking' Endpoint. The current sources do not mark it as known exploited. The current feed maps roxnor/Rox Appointment Booking – Event, Calendar & Appointment Scheduling (generic). Check affected ranges and fixed versions before updating.
Analysis pending evidence review
HOL Guard separates source facts from reviewed analysis. See the methodology.
CVSS is 8.8. The current sources do not mark it as known exploited. Treat this as a source-backed prioritization signal, not a statement about your environment.
Analysis status
Analysis pending evidence review
Factual feed record only; HOL analysis is not approved for indexing. Read the methodology.
The current feed maps roxnor/Rox Appointment Booking – Event, Calendar & Appointment Scheduling (generic). Check affected ranges and fixed versions before updating.
| Package | Affected range | Fixed version |
|---|---|---|
| roxnor/Rox Appointment Booking – Event, Calendar & Appointment Schedulinggeneric | >=0 <=1.3.1 | Not reported |
Published upstream
Oct 31, 2026
Evidence: source:cvelist:source_dates:source-dates:recordSource modified
Oct 31, 2026
Evidence: source:cvelist:source_dates:source-dates:recordFirst seen by HOL
Oct 31, 2026
The Rox Appointment Booking – Appointment Booking Scheduling Solution plugin for WordPress is vulnerable to Privilege Escalation via Mass Assignment in all versions up to, and including, 1.3.1 This is due to the public `/rox-appointment-booking/v1/public/booking` REST endpoint performing mass-assignment of the raw request body into a new customer row while `CustomerModel::$fillable` includes the internal `wp_user_id` column, allowing an unauthenticated attacker to persist an arbitrary WordPress user ID alongside an attacker-controlled email address with no authorization check. When an administrator subsequently opens the poisoned customer record and clicks Update Customer, `SaveCustomer::handleRequest()` passes the stored `wp_user_id` and attacker-supplied email to `wp_update_user()` — succeeding because `LinkedAccount::canChange()` unconditionally returns true when the acting user holds the `edit_users` capability — thereby overwriting the targeted administrator's email address and enabling full account takeover via a standard WordPress password-reset request. Successful exploitation requires an administrator to open and save the poisoned record, and the attacker must know or guess a valid administrator user ID (such as the default user ID 1).
Quoted source text, attributed separately from HOL analysis.