Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend crafted request to public booking REST endpoint
-
DeliveryMass-assign wp_user_id=1 with attacker-controlled email
-
ExploitPoisoned customer row persisted unauthenticated
-
ExecutionAdministrator opens record and clicks Update Customer
-
Persistwp_update_user overwrites admin email address
-
ImpactPassword-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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
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.
Primary rating from Vendor (Wordfence).
CVSS VectorNVD
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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
More in Wordpress Plugin
View allThe Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
The Hash Form - Drag & Drop Form Builder plugin for WordPress is vulnerable to arbitrary file uploads due to missing fil
Authentication bypass in the LiteSpeed Cache WordPress plugin (versions prior to 6.5.0.1) allows unauthenticated remote
The Simple File List plugin for WordPress through version 4.2.2 contains an unauthenticated remote code execution vulner
The AI Engine WordPress plugin through version 3.1.3 exposes Bearer Token values through the /mcp/v1/ REST API endpoint
The SureTriggers WordPress plugin through version 1.0.82 contains a privilege escalation vulnerability that allows unaut
The Ninja Forms plugin before 2.9.42.1 for WordPress allows remote attackers to conduct PHP object injection attacks via
The Business Directory Plugin - Easy Listing Directories for WordPress plugin for WordPress is vulnerable to time-based
SQL injection in the NotificationX WordPress plugin (versions up to and including 2.8.2) allows unauthenticated remote a
The POST SMTP Mailer - Email log, Delivery Failure Notifications and Best Mail SMTP for WordPress plugin for WordPress i
The MasterStudy LMS WordPress Plugin - for Online Courses and Education plugin for WordPress is vulnerable to union base
The Email Subscribers by Icegram Express plugin for WordPress is vulnerable to SQL Injection via the ‘hash’ parameter in
EUVD-2026-114645
GHSA-8cr7-x3xr-ppw5
NVD
CVE.org
EPSS
Exploit-DB