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
Share

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

Lifecycle Timeline

2
Analysis Generated
Aug 16, 2026 - 07:23 vuln.today
CVE Published
Aug 16, 2026 - 06:38 nvd
HIGH 7.2

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

Share

EUVD-2026-59927 vulnerability details – vuln.today

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