Skip to main content

Rox Appointment Booking CVE-2026-104012

| EUVDEUVD-2026-114645 HIGH
Improper Privilege Management (CWE-269)
2026-10-31 Wordfence GHSA-8cr7-x3xr-ppw5
8.8
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send crafted request to public booking REST endpoint
  2. Delivery
    Mass-assign wp_user_id=1 with attacker-controlled email
  3. Exploit
    Poisoned customer row persisted unauthenticated
  4. Execution
    Administrator opens record and clicks Update Customer
  5. Persist
    wp_update_user overwrites admin email address
  6. Impact
    Password-reset request yields full account takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Stage one requires only that the plugin (version ≤1.3.1) be installed with its public booking REST route /rox-appointment-booking/v1/public/booking reachable - the default state - allowing any unauthenticated visitor to persist a customer row with an arbitrary wp_user_id, because CustomerModel::$fillable includes the internal wp_user_id column and no authorization check is applied. The attacker must know or guess a valid administrator user ID (default user ID 1 is a reliable guess). Stage two is the key limiting factor: an administrator must subsequently open the poisoned customer record and click Update Customer, at which point SaveCustomer::handleRequest() passes the stored wp_user_id and attacker email to wp_update_user() (permitted because LinkedAccount::canChange() unconditionally returns true for users with edit_users). No non-default configuration is needed, but the mandatory administrator interaction (UI:R) and the user-ID guess bound realistic exploitation.

Impact

This is a genuine, high-severity issue but not a drop-everything emergency, and the signals are internally consistent once the two-stage mechanic is understood. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H, 8.8) correctly captures that the initial mass-assignment write is remote and unauthenticated (PR:N) and that the ultimate impact is full compromise (C:H/I:H/A:H), while UI:R honestly reflects the hard dependency on an administrator later opening and saving the poisoned customer record. The vuln.today decision label is 'this_week' rather than 'act_now'/'emergency', which aligns with the UI:R gating and the attacker's need to know or guess a valid administrator user ID. No EPSS score was supplied, so exploitation probability cannot be quantified from the input; there is no CISA KEV listing (not actively exploited per available data) and no working exploit code is provided - the references are the Wordfence advisory and plugin source on plugins.trac, not a weaponized PoC. The main reason to prioritize is the low barrier to the first stage (any unauthenticated visitor can plant the poisoned record against default user ID 1) combined with the catastrophic outcome; the main reason it is not an emergency is the required administrator interaction. Net: a real priority to patch promptly, consistent with the 'this_week' label, not a high-CVSS-but-trivial-impact paper cut.

Exploit ScenarioDerived

An unauthenticated attacker sends a crafted request to the public /rox-appointment-booking/v1/public/booking REST endpoint, mass-assigning the internal wp_user_id field (e.g. 1, the default admin) together with an attacker-controlled email, persisting a poisoned customer row. Later, when an administrator opens that customer record and clicks Update Customer, the plugin calls wp_update_user() with the stored admin user ID and attacker email, overwriting the administrator's address; the attacker then issues a standard WordPress password reset to take over the account. No public exploit code is identified at time of analysis, though the vulnerable code paths are documented in the Wordfence advisory and plugin source references.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 31, 2026

Unauthenticated attackers can escalate to administrator account takeover on WordPress sites running Rox Appointment Booking 1.3.1 and earlier, because the plugin's public booking REST route mass-assigns the raw request body into a customer record whose fillable fields include the internal wp_user_id column. An attacker can seed a poisoned customer row carrying an arbitrary administrator user ID (user ID 1 is a reliable guess) plus an email address they control, but the takeover only completes when an administrator later opens that record and clicks Update Customer, at which point the stored wp_user_id and attacker-supplied email are handed to wp_update_user() and the administrator's email is overwritten, enabling a standard WordPress password reset. The attack is network-reachable and needs no credentials, though the mandatory administrator interaction and the user-ID guess bound real-world exploitation; there is no CISA KEV listing, no confirmed public exploit code, and the fix is the vendor's 1.3.2 release.

RemediationAI

Update to Rox Appointment Booking 1.3.2, the vendor-released patch available at https://downloads.wordpress.org/plugin/rox-appointment-booking.1.3.2.zip, which closes the mass-assignment path by removing wp_user_id from untrusted input and the subsequent unchecked wp_update_user() call (advisory: https://www.wordfence.com/threat-intel/vulnerabilities/id/2a32f428-fa6e-469b-b004-e80a1029af80?source=cve). Until the update is deployed, the effective interim control is to block external access to the /rox-appointment-booking/v1/public/booking REST route at the WAF, reverse proxy or web server, accepting that the front-end booking form stops working for legitimate customers; a narrower option is to keep the route open only to known client IP ranges. Also audit existing customer rows for unexpected wp_user_id values or email addresses not matching real customers and delete or clear those records before an administrator reviews them, since opening and saving a poisoned record with the Update Customer button is what triggers the email overwrite. Because the final step abuses the standard WordPress password reset, confirming that all administrator accounts still hold their expected email addresses and rotating administrator credentials after cleanup limits residual exposure.

Affected VersionsENISA

Rox Appointment Booking – Event, Calendar & Appointment Scheduling 0 ≤1.3.1

Affected Packages

euvd rox_appointment_booking_event_calendar_appointment_scheduling no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The plugin exposes an unauthenticated REST route at /rox-appointment-booking/v1/public/booking; per the referenced source (BookingConfirm.php line 61 and CustomerService.php line 74), the handler feeds the raw request body into a new customer row, and CustomerModel.php line 38 lists wp_user_id among CustomerModel::$fillable, so an internal linkage column becomes attacker-writable. This is a classic mass-assignment weakness mapped to CWE-269 (Improper Privilege Management): the code mixes user-supplied booking input with trusted internal state and performs no authorization check on the linkage field. The second stage lives in SaveCustomer.php (line 262), where SaveCustomer::handleRequest() reads the stored wp_user_id and the attacker-controlled email and passes both to WordPress core's wp_update_user(); the guard LinkedAccount::canChange() unconditionally returns true whenever the acting user holds the edit_users capability, which administrators do by default, so the email overwrite succeeds. The underlying stack is the WordPress plugin ecosystem and the WordPress REST API, with the impact realized through core's wp_update_user() and the standard lost-password flow rather than through any database or memory-safety flaw.

Know when Wordpress Plugin gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Wordfence) PRIMARY HIGH
NVD 8.8 HIGH
AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

Initial write is remote and unauthenticated (AV:N/PR:N); default user ID 1 keeps AC:L; completion needs an admin to open and save the record (UI:R); account takeover gives C:H/I:H/A:H.

3.1 AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

DescriptionNVD

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).

Executive ViewAI

Why It Matters

CVE-2026-104012 is a high-severity vulnerability in the Rox Appointment Booking WordPress plugin, affecting sites running version 1.3.1 and earlier, which could allow an unauthenticated attacker to take over administrator accounts after a site administrator performs a specific action. This puts WordPress sites using this plugin at risk of full compromise, data breach, and reputational damage. Leadership should prioritize remediation because the plugin is widely used and the attack requires minimal effort from the attacker.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include disabling the Rox Appointment Booking plugin, restricting access to the vulnerable REST route using a WAF, and monitoring administrator account changes.

Threat Intelligence Overview

EPSS Score
0.3%
Top 79% exploitable
Prevalence
Low
niche WordPress appointment-booking plugin, limited install base
Social Media
2
Sightings
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

CVE-2024-5084 CRITICAL POC
9.8 May 23

The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil

CVE-2024-44000 CRITICAL POC
9.8 Oct 20

Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote

CVE-2020-36847 CRITICAL POC
9.8 Jul 12

The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner

CVE-2025-11749 CRITICAL POC
9.8 Nov 05

The AI Engine WordPress plugin through version 3.1.3 exposes Bearer Token values through the /mcp/v1/ REST API endpoint

CVE-2025-27007 CRITICAL POC
9.8 May 01

The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut

CVE-2016-1209 CRITICAL POC
9.8 May 14

The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via

CVE-2024-4443 CRITICAL POC
9.8 May 22

The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based

CVE-2024-1698 CRITICAL POC
9.8 Feb 27

SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a

CVE-2023-6875 CRITICAL POC
9.8 Jan 11

The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i

CVE-2024-1512 CRITICAL POC
9.8 Feb 17

The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base

CVE-2024-4295 CRITICAL POC
9.8 Jun 05

The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy