CVE-2026-104012: Rox Appointment Booking privilege escalation vulnerability
high 8.8 published 2026-10-31 · updated 2026-11-02
- Affected versions
- 1.3.1 and older
- Fixed in
- 1.3.2 *
- Latest version
- 1.3.3
- Severity
- High · CVSS 8.8
- Active installs
- 2,000+
- Type
- Privilege escalation
* The source does not name a fixed version; this is the first wordpress.org release after the last affected version.
What an attacker needs
- Access: None. No account or login is needed.
- Interaction: It also needs someone on the site (often an admin) to click a link, open a page or submit a form the attacker prepared.
CVSS vector (score by Wordfence): CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
What to do now
- Update Rox Appointment Booking to 1.3.2 or newer (the latest is 1.3.3): Dashboard → Updates, or Plugins → “update now”.
- If you cannot update right away, deactivate it until you can.
- Turn on auto-updates for it: Plugins → “Enable auto-updates” on its row.
- Not sure which version you run? Check your version against every known Rox Appointment Booking issue.
With WP-CLI:
wp plugin get rox-appointment-booking --field=version. - If you ran an affected version and something looks off (new admin users, spam pages, redirects), run the free scan below.
The advisory
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).
References
- NVD CVE-2026-104012 nvd.nist.gov
- Wordfence advisory www.wordfence.com
- downloads.wordpress.org downloads.wordpress.org
- Plugin source plugins.trac.wordpress.org
Related
Ran an affected version? Check your site for signs of a hack
The free scan reads the public side of your site and looks for spam pages, hidden redirects, injected scripts and blacklist entries. No login, no install, about a minute.
Where this data comes from
- CVE record, score and references: NIST National Vulnerability Database (NVD), checked 2026-11-04. This product uses data from the NVD API but is not endorsed or certified by the NVD.
- Versions and install counts: wordpress.org/plugins/rox-appointment-booking (Plugins API), fetched 2026-11-04.
- The summary, “what an attacker needs” and “what to do” sections are our plain-English reading of the record and the plugin's release history; the quoted description is the record's own text. Spot an error? Email Daniel.