Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach public nopriv booking AJAX endpoint
-
DeliverySubmit verification_code as JSON boolean true
-
ExploitLoose != check bypasses ownership verification
-
ExecutionOverwrite target customer name/email/phone/address
-
ImpactRedirect victim booking notifications to attacker
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization verification
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | No special conditions beyond a reachable installation: unauthenticated network exploitation works against default configurations of the Bookly WordPress plugin (versions up to and including 28.2), because the booking AJAX controller registers every method as a wp_ajax_nopriv_ handler and unconditionally forces csrfTokenValid() to return true. The only functional prerequisite is that a target Bookly customer record already exists (the attack overwrites an existing record), and that the front-end booking flow reaches the verification step. Exploitation is limited only by the plugin being installed and active and by the attacker knowing/enumerating a valid customer to target; the type-juggling bypass specifically requires using the json_data input channel (json_decode preserving the PHP boolean true) so that wp_kses leaves the non-string value intact. |
| Impact | This is a genuine but moderate-severity issue whose real-world risk is well-captured by the CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) rather than being an inflated high-CVSS case. The exploit is trivially simple (network, low complexity, no auth, no user interaction - submit the JSON boolean true as verification_code), which makes it attractive for automation, but the technical impact is bounded: an attacker can overwrite the name/email/phone/address of existing Bookly customer records and hijack their booking notifications, so the impact is integrity-limited (I:L) with no direct system compromise (C:N/I not high/A:N per NVD). I mildly dispute C:N: redirecting a victim's booking notifications to attacker-controlled contacts leaks that customer's future appointment details, arguably C:L. No EPSS score, no CISA KEV listing, and no public POC were provided, so there is no evidence of active exploitation - the risk is potential, not observed. The Wordfence-attributed research and a confirmed WordPress.org trac patch (changeset 3707284, versions after 28.2) are the strongest confirmed signals; the low-complexity unauthenticated vector on a popular booking plugin makes patching worthwhile but this is not an emergency-tier RCE. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a crafted AJAX request to the public wp_ajax_nopriv Bookly booking endpoint, supplying verification_code as the JSON boolean true through the json_data channel, which bypasses the loose (!=) comparison against the session's random integer code. Having defeated the phone/email ownership check, the attacker rewrites a targeted customer's name, email, phone, and address so all future booking notifications flow to attacker-controlled contacts. No public exploit code was identified at the time of analysis, but the type-juggling technique is documented in detail in the Wordfence advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Unauthenticated attackers can overwrite the name, email, phone, and address of any existing customer record in the Bookly WordPress plugin (Online Scheduling and Appointment Booking System - Bookly, all versions up to and including 28.2), hijacking that customer's booking notifications. The flaw is a PHP type-juggling authorization bypass: the plugin compares a session-stored one-time verification code against the attacker-supplied verification_code using a loose != operator, and because the booking AJAX controller registers its methods as wp_ajax_nopriv_ handlers and unconditionally forces csrfTokenValid() to return true, the endpoint is both unauthenticated and CSRF-unprotected. Submitting the JSON boolean true as the verification_code through the json_data channel - which json_decode() passes through with its real PHP type intact so that wp_kses leaves it untouched - satisfies the loose comparison against the non-zero integer code and bypasses the phone/email ownership check. Severity is moderate (CVSS 5.3, integrity-only impact); no public exploit code has been identified at time of analysis and there is no confirmed active exploitation.
RemediationAI
Vendor-released patched version not independently confirmed: the only fix indicator in the supplied references is the WordPress Trac changeset at https://plugins.trac.wordpress.org/changeset?reponame=&old=3707284%40bookly-responsive-appointment-booking-tool&new=3707284%40bookly-responsive-appointment-booking-tool, i.e. an upstream fix available via commit/changeset rather than a tagged release beyond 28.2. Site operators should update Bookly to the first release that includes changeset 3707284 (or the latest available release) and verify with the vendor advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/d24fa600-7698-4081-92f5-e11606928886?source=cve. Because the endpoint is deliberately registered as an unauthenticated wp_ajax_nopriv_ handler and forces csrfTokenValid() to true, the safest interim compensation is to deactivate the plugin if guest booking is not required; note this removes all booking functionality. A narrower workaround is to block or rate-limit requests to /wp-admin/admin-ajax.php that carry the Bookly booking action parameter and a json_data body containing a non-string verification_code at the WAF or reverse proxy, but this is a probabilistic filter that can be evaded by request-shaping and may break legitimate guest bookings. Administrators should also audit Bookly customer records for unauthorized changes to email, phone, and address fields, since silent modification of notification routing is the observed impact.
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 customer verification flow relies on a one-time code generated with mt_rand(100000, 999999) and stored in the PHP session. The root cause is CWE-285 (Improper Authorization): in the postValidateCustomer() routine (lib/Validator.php and lib/UserBookingData.php), the session code is compared to the user-supplied verification_code with a loose PHP inequality operator (!=) instead of a strict, type-safe comparison (e.g. !== with explicit string casting). This is exploitable because of three compounding weaknesses. First, the booking AJAX controller in frontend/modules/booking/Ajax.php registers its methods as wp_ajax_nopriv_ handlers (Ajax.php line 15), making the endpoint reachable without authentication. Second, the controller's csrfTokenValid() override in lib/base/Component.php unconditionally returns true, removing the nonce/CSRF barrier that would normally protect the request. Third, the json_data input channel decodes data with json_decode(), which preserves native PHP types rather than coercing everything to string; consequently a JSON boolean true reaches the comparison as PHP bool true, and the wp_kses sanitization step (which only acts on strings) leaves it intact. Under PHP's loose comparison rules, true != <non-zero int> evaluates to false, so the guard passes. The CPE cpe:2.3:a:ladela:online_scheduling_and_appointment_booking_system_-_bookly:*:*:*:*:*:*:*:* identifies the affected product under vendor ladela. The impact is bounded to integrity of customer records (contact details and notification routing), consistent with the integrity-only scoring.
Know when PHP 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:N/I:L/A:N
Unauthenticated network attack with no interaction and low complexity (submit boolean true); integrity-limited record overwrite plus C:L from hijacked notifications leaking victim booking details.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
DescriptionCVE.org
The Online Scheduling and Appointment Booking System - Bookly plugin for WordPress is vulnerable to Authorization Bypass via PHP Type Juggling in all versions up to, and including, 28.2. This is due to the postValidateCustomer() function using a loose PHP inequality operator (!=) to compare the session-stored one-time verification code against the attacker-supplied verification_code parameter - a flaw that is further exposed by the booking AJAX controller registering all its methods as wp_ajax_nopriv_ handlers and unconditionally overriding csrfTokenValid() to return true, leaving the endpoint both unauthenticated and CSRF-unprotected. This makes it possible for unauthenticated attackers to bypass the phone/email ownership verification step and overwrite the name, email, phone, and address fields of any arbitrary existing Bookly customer record, redirecting that customer's booking notifications to attacker-controlled contact details. The bypass is achievable because the json_data input channel decodes input via json_decode(), which preserves real PHP types and causes the wp_kses filter to leave non-string values such as the JSON boolean true untouched; submitting true as the verification_code satisfies the loose comparison against the session's non-zero integer code (generated by mt_rand(100000, 999999)), causing true != <non-zero int> to evaluate as false and the guard to be bypassed.
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
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-86543
GHSA-jv6x-x2jh-jfmr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB