| CVE ID | CVSS 评分 | 发现日期 | 受影响插件 | 漏洞类型 |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | 未授权管理员访问 |
本研究聚焦于 CVE¹-2023-3460,这是一个影响 WordPress 插件 "Ultimate Member" 的严重漏洞,可导致未授权的权限提升。该插件被广泛使用,用于 WordPress 网站上的个人资料管理。此漏洞构成重大风险,因为它允许攻击者获得管理员权限,从而完全控制网站。因此,该漏洞被 NIST² 评定为严重级别,评分为 9.1(基于 CVSS 评分标准)。
CVE-2023-3460 利用了该插件在角色和权限管理方面的缺陷。在 WordPress 中,WP_Capabilities³ 函数用于管理用户的角色和权限。该函数允许管理员为每个用户角色定义特定能力。然而,如果该函数使用不当,可能会导致权限提升漏洞。
在 Ultimate Member 的情况下,该漏洞允许攻击者绕过 WP 能力检查,并获得网站的管理员级访问权限。该插件使用一个预定义的用户元数据键列表,这些键不应被用户操作。然而,这种基于黑名单的安全方法往往不够充分,因为它留下了绕过的可能性。
WordPress 通过一个名为 wp_capabilities 的结构来管理用户的角色和权限。该结构是授予用户的不同角色和权限的序列化表示。例如,管理员的能力集与编辑者或投稿者不同。这些能力以序列化数组的形式存储在 WordPress 数据库的 wp_usermeta 表中。
CVE-2023-3460 漏洞的根源在于 Ultimate Member 对角色和权限管理的实现。该插件使用一个预定义的用户元数据键列表,用户不应操作这些键。此列表用于检查用户在创建账户时是否尝试保存这些键。这是一种常见的安全反模式,即阻止已知有害输入(黑名单)的方法看似直观,但实际上比预期更复杂,并且常常留下安全绕过的空间。
在此,Ultimate Member 在用户注册时对提交的元数据检查不足。该插件使用一个名为 is_metakey_banned 的函数来检查用户提交的元数据是否被允许。此函数检查提交的元数据是否出现在被禁止的元数据列表中。如果是,该函数返回 true,用户注册将被阻止。否则,该函数返回 false,用户注册将被允许。
然而,WordPress 接受某些带重音符号的字符作为默认字符。如果用户提交带有重音符号的元数据,is_metakey_banned 函数将无法检测到它们,用户注册将被允许。
Ultimate Member 插件被广泛用于各种环境,从个人小博客到大型电子商务网站。无法对最终用户或网站管理员的信息安全技能做出具体假设。
托管 WordPress 网站的服务器通常位于安全的数据中心。对于个人网站,物理安全取决于用户的个人环境。
假设 Ultimate Member 插件已按照官方说明正确安装和配置。假设 WordPress 网站保持更新,并已采取基本的安全措施。
7.5 安全功能
作为管理员,以下是可以采取的具体措施,以降低与此漏洞相关的风险。
用户输入验证:在服务器端实施验证,以检查所有用户输入,尤其是修改 wp_capabilities 等元数据的输入。使用正则表达式或验证白名单,而不是黑名单来控制输入。
CAPTCHA 和速率限制:在注册表单中集成 CAPTCHA 和速率限制,以防止自动化攻击。 客户端检查:虽然仅靠客户端验证不够,但它可以帮助防止自动化攻击并改善用户体验。
日志监控:建立日志监控系统,以检测任何可疑的用户角色修改或元数据注入尝试。这可以通过使用日志分析工具来实现。
Web 应用防火墙(WAF):配置 WAF⁴ 以阻止已知和未知攻击,包括恶意代码注入攻击。 入侵检测/防御系统(IDS/IPS)⁵:部署 IDS/IPS 以检测漏洞利用尝试。
用户角色审查:定期审查分配给用户的角色,以检测任何异常权限提升。 权限限制:限制默认授予新用户的权限,并要求管理员验证才能分配高级角色,遵循最小权限原则。有关此原则的详细信息,请参见此处。
及时应用更新:定期对插件和 WordPress 本身进行安全更新。
对开发人员进行前述良好安全实践的培训,并提高他们对错误实现的风险/影响的认识。
提供了一个 Makefile 来帮助您启动漏洞利用。您可以按如下方式使用它:
make up 启动带有所有必要安装的 WordPress。等待一段时间后,它将启动 WordPress 服务器,进行配置,并安装 2.6.5 版本的 Ultimate Member 插件。
然后您可以使用凭据 admin:password 在登录页面登录 WordPress。在用户选项卡中,您可以看到
只有 admin 用户存在。

注意:如果您有 docker-compose 而不是 docker compose,您可以相应地修改 Makefile(变量 DOCKER_COMPOSE= docker-compose)。
然后,您可以启动漏洞利用:
make exploit
然后您可以使用漏洞利用提供的凭据在登录页面登录 WordPress,并在用户选项卡中观察到创建了一个具有 Administrator 角色的新用户。

make down 停止 WordPress 服务器并删除数据。
make exploit 运行 exploit.py 脚本。该脚本分多个步骤执行:
漏洞利用的技术细节1. 漏洞验证: 在进行利用之前,脚本会检查目标站点上安装的 Ultimate Member 插件版本是否易受攻击,即低于 2.6.7 版本。
2. 获取安全 Nonce: 脚本从目标站点的注册页面获取安全 nonce³。此 nonce 是 WordPress 接受注册请求所必需的。通过分析注册页面的 HTML 代码来获取 nonce。
3. 漏洞利用: 然后,脚本向注册页面提交一个 POST 请求,其中包含一个被操纵的参数(wp_càpabilities[administrator]=1)。此参数使用重音字符(à)来绕过插件的安全检查,并错误地序列化数据,从而将管理员角色分配给新创建的用户。
4. 利用确认: 发送请求后,脚本通过分析服务器响应来检查操作是否成功。
| 威胁 | B1(用户数据机密性) | B2(网站完整性) | B3(Ultimate Member 插件完整性) |
|---|
| M1 未授权访问 | X | X | X |
| M2 恶意代码注入 | X | X | |
| M3 数据泄露 | X | ||
| M4 声誉损害 | X |
| 名称 | 链接 |
|---|