Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain target's registered phone/email
-
DeliverySend crafted bookly_render_details AJAX request
-
ExploitCSRF check bypassed, nopriv endpoint reached
-
ExecutionCustomer loaded by phone without identity check
-
ImpactHarvest returned name/email/phone/notes
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific non-default site configuration: the administrator must have inserted at least one of the {client_name}, {client_email}, {client_phone}, or {client_note} placeholders into the classic booking form's Details step 'Appearance' information text - without these placeholders no customer data is substituted and the bug is not reachable. The attacker must also already possess a valid registered customer's primary phone number (or email), since the Customer entity is looked up by that attacker-supplied value; this limits the flaw to per-victim targeted disclosure rather than bulk enumeration. Offsetting these limits, no authentication, CSRF token, or user interaction is needed (the endpoint is registered for wp_ajax_nopriv, csrfTokenValid() is forced true, and customerIdentityConfirmed() is never called), so any such configured site is remotely reachable by anonymous attackers. Affected: Bookly versions up to and including 28.4; fixed in 28.5. |
| Impact | This is a genuine but moderate-severity information-disclosure issue, and the signals are internally consistent rather than conflicting. The CVSS vector (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N, 5.3) correctly reflects remote, unauthenticated access with only limited confidentiality impact and no integrity or availability effect - matching the description, which confirms the dual wp_ajax/wp_ajax_nopriv registration, the csrfTokenValid() override returning true, and the missing customerIdentityConfirmed() check. No EPSS score, KEV listing, or public POC is present in the supplied data, so exploitation is not confirmed in the wild; this is not a drop-everything priority. The practical risk is bounded by two real-world gatekeepers that CVSS does not fully capture: the site owner must have placed {client_name}/{client_email}/{client_phone}/{client_note} placeholders into the Details step's Appearance text (a non-default configuration), and the attacker must already know a valid registered customer's primary phone or email. The disclosure is also per-customer rather than a bulk dump, which argues for targeted abuse (e.g., confirming/profiling a specific known individual) over mass automated harvesting. Net: a credible privacy/PII-exposure bug worth patching promptly on affected, placeholder-configured sites, but lower urgency than a critical RCE given the limited impact and configuration dependency. |
| Exploit ScenarioDerived | An attacker who already knows a target customer's registered phone number (or email) submits a crafted request to the unauthenticated bookly_render_details AJAX endpoint of a Bookly site whose Details step Appearance text contains customer placeholders. Because the CSRF check is bypassed and no identity confirmation is performed, the server loads the matching Customer entity and returns HTML containing that person's stored name, email, phone, and internal notes. No public exploit code is identified in the provided data, but the low attack complexity makes manual exploitation straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 10, 2026
Unauthenticated attackers who already know a registered customer's primary phone number or email can read that customer's stored name, email, phone and internal notes from WordPress sites running the Bookly - Online Scheduling and Appointment Booking System plugin in versions up to and including 28.4. The classic booking form's Details step endpoint bookly_render_details is registered for wp_ajax_nopriv, its csrfTokenValid() check is overridden to always return true, and InfoText::getCodes() loads a persisted Customer entity keyed solely by the attacker-supplied phone or email without ever calling the plugin's customerIdentityConfirmed() predicate, so {client_name}, {client_email}, {client_phone} and {client_note} placeholders are substituted into the returned HTML. Exploitation requires a non-default site configuration (the administrator must have inserted at least one of those placeholders into the Details step's Appearance information text) and a valid victim identifier, which limits this to targeted per-victim disclosure rather than bulk enumeration; no public exploit was identified at time of analysis. The flaw is fixed in Bookly 28.5.
RemediationAI
Upgrade the Bookly plugin to version 28.5 or later, which is the vendor-released fix documented in the 28.4-to-28.5 changeset (https://plugins.trac.wordpress.org/changeset?reponame=&new=3730881%40bookly-responsive-appointment-booking-tool%2Ftags%2F28.5&old=3722721%40bookly-responsive-appointment-booking-tool%2Ftags%2F28.4) and described in the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/df578e6c-cecd-4c80-b11c-3916ec22c7c7?source=cve. If immediate patching is not possible, remove the {client_name}, {client_email}, {client_phone} and {client_note} placeholders from the classic booking form's Details step 'Appearance' information text, which eliminates the vulnerable substitution path at the cost of removing personalized confirmation text from the booking flow. As a supplemental control, block or rate-limit unauthenticated requests to the bookly_render_details AJAX action via a WAF/ModSecurity rule or by hooking wp_ajax_nopriv_bookly_render_details, but be aware that this may break the Details step for legitimate guest bookings, and because the endpoint accepts no CSRF token and the lookup is keyed solely by an attacker-supplied phone or email, such blocking only reduces exploitability rather than eliminating the underlying information exposure. No public exploit code was identified at time of analysis, so there is no confirmed active exploitation to prioritize against.
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
Bookly is a WordPress appointment-booking plugin whose classic booking form is driven by AJAX actions under the admin-ajax.php handler. The Details step is served by the action bookly_render_details, which overrides the standard csrfTokenValid() method so that every request is treated as CSRF-valid, and is registered for both authenticated (wp_ajax_) and unauthenticated (wp_ajax_nopriv_) callers. During rendering, Bookly\Frontend\Components\Booking\InfoText::getCodes() resolves placeholder codes by calling UserBookingData::getCustomer(), which looks up the persisted Customer entity using only the phone or email value supplied in the request. The plugin's own customerIdentityConfirmed() authorization predicate is never invoked on this path, and the four client-related placeholders are populated directly from the matched Customer record. The result is a CWE-200 exposure of stored personal data (name, email, phone, internal notes) tied to the two-stage prerequisite that an admin has configured one of the affected placeholders and the attacker already possesses a victim's phone or email. The affected package is identified by CPE cpe:2.3:a:ladela:online_scheduling_and_appointment_booking_system_-_bookly and the vulnerable code paths are visible in the 28.3 tag of bookly-responsive-appointment-booking-tool (InfoText.php#L389, frontend/modules/booking/Ajax.php#L570, #L791, #L1515, #L15, lib/UserBookingData.php#L838).
Know when Online Scheduling And Appointment Booking System Bookly 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:N/S:U/C:L/I:N/A:N
Remote unauthenticated via a nopriv endpoint with CSRF bypass (AV:N/PR:N/UI:N); only limited customer PII is disclosed (C:L, I:N/A:N); AC:L since the lookup is deterministic once a known phone/email is supplied.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Bookly - Online Scheduling and Appointment Booking System plugin for WordPress is vulnerable to Sensitive Information Exposure in versions up to, and including, 28.4 via the classic booking form's Details step. The endpoint bookly_render_details is registered for both wp_ajax and wp_ajax_nopriv, the module overrides csrfTokenValid() to always return true, and Bookly\Frontend\Components\Booking\InfoText::getCodes() calls UserBookingData::getCustomer() to load the persisted Customer entity keyed solely by the attacker-supplied phone (or email) with no invocation of the plugin's own customerIdentityConfirmed() predicate. When a site owner has placed the supported {client_name}, {client_email}, {client_phone}, or {client_note} placeholders into the Details step's Appearance information text, the matched customer's stored name, email, phone and internal notes are substituted into the returned HTML. This makes it possible for unauthenticated attackers who know only a registered customer's primary phone (or email) to read that customer's stored personal data.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Unauthenticated attackers can read the complete AI booking conversation transcript of any Bookly customer — including na
Unauthenticated attackers can exploit an insecure direct object reference in the Bookly appointment-booking plugin for W
Stored cross-site scripting in the Bookly WordPress appointment booking plugin (versions up to and including 27.7) enabl
PHP Object Injection in the Bookly (Online Scheduling and Appointment Booking System) WordPress plugin, affecting all ve
Stored cross-site scripting in the Bookly Online Scheduling and Appointment Booking System plugin for WordPress (version
Privilege escalation in the Bookly WordPress plugin (versions up to and including 28.4) allows authenticated attackers w
Unauthorized plugin update execution in the Bookly scheduling plugin for WordPress (all versions through 27.2) allows an
Price manipulation in Bookly WordPress plugin (versions up to 27.0) allows unauthenticated attackers to reduce appointme
Unauthenticated attackers can overwrite the name, email, phone, and address of any existing customer record in the Bookl
Insecure Direct Object Reference in the Bookly plugin's Mobile Staff Cabinet API (versions up to and including 27.7) all
EUVD-2026-96040
GHSA-5p6p-rjcr-26xj
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB