CVE-2024-13821
Executive Summary
CVE-2024-13821 is a vulnerability in the WP Booking Calendar plugin for WordPress, affecting all versions up to and including 10.10. The flaw allows unauthenticated attackers to manipulate confirmed bookings after they have been approved, due to insufficient re-verification of booking changes. This can lead to unauthorized modifications of booking data, potentially causing service disruption or fraud. The CVSS score is 5.3 (Medium), with a low EPSS score of 0.0%, indicating low exploitation likelihood at this time. No public proof-of-concept or patch details are available.
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 monitor for updates from the vendor and verify plugin integrity via checksums provided by WordPress.org.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: None (C:N)
- Integrity Impact: Low (I:L)
- Availability Impact: None (A:N)
The threat level is Medium due to the low complexity and no authentication requirement, but the impact is limited to integrity of booking data.
Deep Dive & Mechanics
The vulnerability resides in the booking modification functionality of the WP Booking Calendar plugin. When a user makes a booking and it is approved, the plugin does not properly enforce re-verification of the booking owner's identity when changes are attempted. This allows an unauthenticated attacker to send crafted requests to modify booking details (e.g., dates, times, or customer information) without providing valid credentials or session tokens.
The root cause is a missing or insufficient authorization check (CWE-862) in the booking update endpoint. The plugin likely relies on a booking ID or token that can be guessed or enumerated, rather than requiring a nonce or authentication token tied to the original booking session.
Vulnerable vs. Patched Code
Since no patch is available, the following is a hypothetical comparison based on common fixes:
Vulnerable Code (wp-booking-calendar/includes/booking.php):
function update_booking($booking_id, $data) {
// No verification of user identity
$wpdb->update($wpdb->prefix . 'bookings', $data, array('id' => $booking_id));
}
Patched Code (Hypothetical):
function update_booking($booking_id, $data) {
// Verify nonce and user session
if (!wp_verify_nonce($_POST['_wpnonce'], 'update_booking_' . $booking_id)) {
wp_die('Security check failed.');
}
// Ensure user owns the booking
$booking = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}bookings WHERE id = %d", $booking_id));
if ($booking->user_id != get_current_user_id()) {
wp_die('Unauthorized.');
}
$wpdb->update($wpdb->prefix . 'bookings', $data, array('id' => $booking_id));
}
Exploitation & Lab Setup
Red Team
- Setup: Install WordPress with WP Booking Calendar plugin version 10.10 on a local server.
- Reconnaissance: Identify the booking modification endpoint (e.g.,
/wp-admin/admin-ajax.php?action=wpbc_modify_booking). - Exploitation: Send a POST request with modified booking data and a valid booking ID obtained from enumeration or public listings.
curl -X POST http://target/wp-admin/admin-ajax.php \ -d "action=wpbc_modify_booking&booking_id=123&new_date=2025-01-01&new_time=10:00" - Verification: Check that the booking details have changed without authentication.
Blue Team
- Detection: Monitor for unusual booking modification requests from unauthenticated IPs.
- Mitigation: Implement Web Application Firewall (WAF) rules to block requests to booking modification endpoints without valid nonces.
- Honeypot: Create fake bookings with known IDs to detect scanning attempts.
Indicators of Compromise (IOCs)
- Network: HTTP POST requests to
/wp-admin/admin-ajax.phpwithaction=wpbc_modify_bookingand no_wpnonceparameter. - Logs: WordPress debug logs showing
wpbc_modify_bookingaction from unauthenticated users. - File: Modified booking entries in the
wp_booking_calendar_bookingsdatabase table with unexpected changes.
Detection Engineering
YARA Rule
rule wp_booking_calendar_exploit {
meta:
description = "Detects exploitation attempts for CVE-2024-13821"
author = "Valters IT"
date = "2025-04-10"
strings:
$s1 = "wpbc_modify_booking" ascii wide nocase
$s2 = "booking_id" ascii wide nocase
condition:
all of them
}
Sigma Rule
title: WP Booking Calendar Unauthenticated Booking Modification
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects unauthenticated POST requests to modify bookings
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'action=wpbc_modify_booking'
cs-uri-query|contains: 'booking_id='
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: high
Suricata Rule
alert http any any -> any any (msg:"WP Booking Calendar Unauthenticated Booking Modification"; flow:to_server; http.method; content:"POST"; http.uri; content:"action=wpbc_modify_booking"; http.uri; content:"booking_id="; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Disable the WP Booking Calendar plugin until a patch is available.
- Workaround: Implement a WAF rule to block requests to
wpbc_modify_bookingaction without a valid nonce. - Long-term: Apply the vendor patch when released, or consider replacing the plugin with an alternative.
- Monitoring: Enable detailed logging for booking modification actions and review regularly.
Report generated by Valters IT DevSecOps AI Assistant
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.