Skip to main content

Bookly CVE-2026-92799

| EUVDEUVD-2026-86543 MEDIUM
Improper Authorization (CWE-285)
2026-09-25 Wordfence GHSA-jv6x-x2jh-jfmr
5.3
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Access
    Reach public nopriv booking AJAX endpoint
  2. Delivery
    Submit verification_code as JSON boolean true
  3. Exploit
    Loose != check bypasses ownership verification
  4. Execution
    Overwrite target customer name/email/phone/address
  5. Impact
    Redirect 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – 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

Online Scheduling and Appointment Booking System – Bookly 0 ≤28.2

Affected Packages

euvd online_scheduling_and_appointment_booking_system_bookly 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

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

Vendor (Wordfence) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 6.5 MEDIUM

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.

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

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

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

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

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Medium
popular commercial WordPress appointment-booking plugin, common but not universal
Data Quality
3 sources
Confidence: Low

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

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.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

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

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