Skip to main content

Bookly EUVDEUVD-2026-59927

| CVE-2026-13424 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-08-16 Wordfence GHSA-q2ch-2q4j-vq6h
7.2
CVSS 3.1 · Vendor: Wordfence
View

Attack ChainAIDerived

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

  1. Access
    Send unauthenticated POST to wp-admin/admin-ajax.php
  2. Delivery
    Submit absent or invalid signature to trigger error-logging path
  3. Exploit
    XSS payload stored verbatim in bookly_log.details column
  4. Execution
    Administrator opens Diagnostics Logs page
  5. Persist
    Stored script executes in privileged admin browser context
  6. Impact
    Session credentials exfiltrated or rogue admin account created

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

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

Exploitation Conditions

The Bookly plugin must be installed and active on the target WordPress site running version 27.7 or earlier. The bookly_speed_up_update_addons AJAX action is registered under wp_ajax_nopriv_* and is therefore accessible to unauthenticated users at the standard WordPress AJAX endpoint wp-admin/admin-ajax.php - no account, session cookie, nonce, or API key is required for the injection step. The specific trigger for the unsanitized log-write path is submitting a request without a valid signature, which causes lib/PluginsUpdater.php to enter its error-handling branch and store attacker-supplied request details directly in bookly_log.details. Payload execution requires a WordPress user with administrator-level access to subsequently navigate to the Diagnostics → Logs page in the WordPress backend; this is a natural administrative action and cannot be triggered remotely by the attacker but is a predictable behavior on active installations. The key limiting factor is this indirect execution dependency - the attacker cannot control when or whether an administrator views the logs page, introducing delay but not meaningful prevention.

Impact

The CVSS 3.1 base score of 7.2 is driven by a network-accessible, low-complexity, unauthenticated vector with changed scope - metrics that accurately characterize the injection phase. However, the provided vector specifies UI:N, which is inconsistent with the actual execution trigger: the stored payload only fires when an administrator visits the Diagnostics → Logs page, constituting user interaction on the victim's side; an independent assessment using UI:R is more accurate and is reflected in the assessed vector below. The scope change (S:C) is correctly applied because execution crosses from the plugin's database storage context into the privileged administrator browser session. No EPSS score was included in available data, and this CVE is not listed in the CISA KEV catalog, suggesting no observed widespread exploitation to date; that said, even a mid-sized municipal IT team in leszno running a public-facing WordPress booking portal should treat this as urgent given the entirely unauthenticated injection step and the administrative privilege context of payload execution. The attack is highly automatable - a single crafted HTTP POST is sufficient to pre-position a payload - and stored persistence means one request can target all future administrator sessions, not just one. The primary factor limiting immediate impact is that execution depends on an administrator navigating to the specific Diagnostics Logs page, which cannot be forced by an external attacker but is likely to occur organically on active installations.

Exploit ScenarioDerived

An unauthenticated attacker submits a single crafted HTTP POST request to wp-admin/admin-ajax.php with action=bookly_speed_up_update_addons and an absent or invalid signature, embedding a JavaScript payload in the request body; the plugin's signature-validation failure path in lib/PluginsUpdater.php writes the raw, unsanitized input to the bookly_log.details database column. The next time a WordPress administrator opens the Diagnostics → Logs page in the backend - a routine action during troubleshooting or plugin management - the stored script executes in their browser context, enabling session cookie exfiltration, creation of rogue administrator accounts, or silent redirection to attacker-controlled infrastructure. No confirmed public proof-of-concept code exists at time of analysis, though the attack requires only a single HTTP request and knowledge of the AJAX action name, both of which are derivable from the publicly available plugin source code in the WordPress SVN repository.

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 – Aug 16, 2026

Stored cross-site scripting in the Bookly WordPress appointment booking plugin (versions up to and including 27.7) enables unauthenticated remote attackers to inject persistent JavaScript via the bookly_speed_up_update_addons AJAX endpoint, with payloads stored verbatim in the bookly_log.details database column and executing in administrator browser sessions when they navigate to the Diagnostics → Logs page. The injection point is registered under the wp_ajax_nopriv_* hook prefix, making it reachable without any authentication via the standard WordPress AJAX endpoint; the error-logging code path in lib/PluginsUpdater.php writes attacker-controlled input directly to the database when a request is submitted without a valid signature. No public exploit code or CISA KEV listing has been confirmed at time of analysis, though the zero-barrier injection path combined with privileged execution context represents a realistic and impactful threat to any active Bookly installation.

RemediationAI

Update the Bookly plugin to the version immediately following 27.7; verify the exact patched release number against the Wordfence advisory at https://www.wordfence.com/threat-intel/vulnerabilities/id/cfb53e44-7f9d-490f-b938-f428c20219d7 and the upstream SVN changeset at https://plugins.trac.wordpress.org/changeset?reponame=&old=3637918%40bookly-responsive-appointment-booking-tool&new=3637918%40bookly-responsive-appointment-booking-tool, as the exact first-fixed version is not independently confirmed from available data. If an immediate update is not feasible, disabling the Bookly plugin eliminates the vulnerable endpoint entirely at the cost of all booking functionality. As a narrower compensating control, deploying a WAF rule to block unauthenticated POST requests to wp-admin/admin-ajax.php with action=bookly_speed_up_update_addons prevents the injection step without requiring a plugin change, though this may interfere with legitimate addon update workflows if they share this action name. Restricting access to the Diagnostics → Logs admin page via role-based access controls limits payload execution surface but does not prevent payloads from being written to the database, leaving residual risk if controls change. Patch availability per SVN changeset is the only confirmed remediation path; no vendor-released versioned patch has been independently verified from the available data.

Affected VersionsENISA

Online Scheduling and Appointment Booking System – Bookly 0 ≤27.7

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

The Bookly plugin (CPE: cpe:2.3:a:ladela:online_scheduling_and_appointment_booking_system_-_bookly:*:*:*:*:*:*:*:*) by Ladela is a WordPress appointment scheduling and management tool. WordPress AJAX actions registered under the wp_ajax_nopriv_* hook prefix are accessible to unauthenticated HTTP clients via wp-admin/admin-ajax.php without any session or nonce validation at the routing layer. The vulnerable handler, bookly_speed_up_update_addons, is implemented in lib/PluginsUpdater.php (lines 13 and 97 per Wordfence SVN references at tags 27.5 and 27.7): when a request arrives without a valid signature, the plugin's error-handling branch logs raw request-supplied data directly to the bookly_log.details database column with neither input sanitization nor parameterized escaping. That stored value is later retrieved and rendered without output escaping in the Diagnostics → Logs admin view, implemented in backend/modules/diagnostics/Ajax.php (line 344) and the accompanying diagnostics.js (line 542). CWE-79 - Improper Neutralization of Input During Web Page Generation - is the root cause: attacker-controlled data flows from an unauthenticated HTTP request through persistent storage into an HTML rendering context without sanitization at either the ingestion or the output stage, representing a classic stored-XSS data-flow failure.

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

Vendor (Wordfence) PRIMARY 7.2 HIGH
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
vuln.today AI 6.1 MEDIUM

UI:R applied because stored payload execution requires an administrator to actively navigate to the Diagnostics Logs page; all other metrics match the unauthenticated network-accessible injection and changed-scope admin browser execution context.

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

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

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

DescriptionCVE.org

The Online Scheduling and Appointment Booking System - Bookly plugin for WordPress is vulnerable to Stored Cross-Site Scripting via bookly_speed_up_update_addons AJAX action in all versions up to, and including, 27.7 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The injection point is the bookly_speed_up_update_addons AJAX action, which is registered as wp_ajax_nopriv_* and therefore reachable without authentication; the payload is stored verbatim in the bookly_log.details column when a request is submitted without a valid signature, and executes when an administrator later views the Diagnostics → Logs page.

Executive ViewAI

Why It Matters

The Bookly WordPress appointment scheduling plugin (versions ≤27.7) contains a stored cross-site scripting vulnerability allowing unauthenticated attackers to inject malicious scripts into administrator browser sessions, creating immediate risk of admin account compromise and website control loss. Organizations using Bookly face exploitation via a simple remote injection attack, with no vendor patch available to remediate the risk.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Disable the wp_ajax_nopriv_bookly_speed_up_update_addons endpoint via WAF or htaccess to block the injection vector; (2) Implement IP-based access restrictions on the WordPress admin /wp-admin directory; (3) Enable comprehensive WordPress security audit logging and establish daily review of admin access logs and bookly_log table entries for suspicious activity; (4) Isolate Bookly instances to lower-risk environments if possible; (5) Prioritize evaluation and migration to an actively maintained alternative appointment scheduling plugin.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
Medium
popular WordPress booking plugin, moderate but not universal deployment
Social Media
4
Sightings
Data Quality
6 sources
Confidence: High

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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

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

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2026-89063 HIGH POC
7.5 Sep 16

Unauthenticated attackers can read the complete AI booking conversation transcript of any Bookly customer — including na

CVE-2026-93399 CRITICAL
9.1 Sep 25

Unauthenticated attackers can exploit an insecure direct object reference in the Bookly appointment-booking plugin for W

CVE-2026-12626 HIGH
7.2 Oct 10

PHP Object Injection in the Bookly (Online Scheduling and Appointment Booking System) WordPress plugin, affecting all ve

CVE-2026-5513 HIGH
7.2 Jun 13

Stored cross-site scripting in the Bookly Online Scheduling and Appointment Booking System plugin for WordPress (version

CVE-2026-104898 MEDIUM
6.8 Oct 10

Privilege escalation in the Bookly WordPress plugin (versions up to and including 28.4) allows authenticated attackers w

CVE-2026-2520 MEDIUM
5.4 Sep 08

Unauthorized plugin update execution in the Bookly scheduling plugin for WordPress (all versions through 27.2) allows an

CVE-2026-103365 MEDIUM
5.3 Oct 10

Unauthenticated attackers who already know a registered customer's primary phone number or email can read that customer'

CVE-2026-2519 MEDIUM
5.3 Apr 09

Price manipulation in Bookly WordPress plugin (versions up to 27.0) allows unauthenticated attackers to reduce appointme

CVE-2026-92799 MEDIUM
5.3 Sep 25

Unauthenticated attackers can overwrite the name, email, phone, and address of any existing customer record in the Bookl

CVE-2026-12905 MEDIUM
4.3 Aug 16

Insecure Direct Object Reference in the Bookly plugin's Mobile Staff Cabinet API (versions up to and including 27.7) all

References

Advisories & patches

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