如果您收到了我的一封电子邮件,将您指向此页面,那是因为您的网站似乎正在运行受一个已知安全问题影响 范围内的 Ultimate Member 版本(由 Ultimate Member 开发的 WordPress 会员与用户资料插件,位于您 的文件中的 /wp-content/plugins/ultimate-member/)。本页面解释该问题是什么、如何判断它是否适用于 您的网站、如何在不被误导的情况下读取您的版本,以及应更新到哪个版本。

该问题是 CVE-2026-19423:插件注册和个人资料表单中的一个无需身份验证的权限提升弱点。它影响 Ultimate Member 2.6.7 至 2.12.1 版本,已在 2.13.0 中修复,该版本发布于 2026 年 8 月 24 日。如果您正在运行该范围内的版本,请将 Ultimate Member 更新到 2.13.0 或更高版本。此问题没有 公布 CVSS 评分(它由 WPScan 分配,未附带严重性向量),因此我不会向您引用任何评分,我也不知道有 任何针对它的公开利用代码。

2.6.7 之前的版本不受此问题影响,在这一点上我想说得精确一些,而不是让通知听起来比实际范围更 广。这不是一个自插件诞生起就存在的缺陷:它所依赖的代码路径是在 2.6.7 中引入的。因此早于 2.6.7 的 安装不是这里的目标,我也没有写信给运行此类版本的网站。如果您的版本被证实低于 2.6.7,就此问题而 言,您可以忽略本通知(不过让一个落后如此之多的插件保持最新,出于其他原因仍然值得)。

首先要说明的是决定此事对您的网站有多重要的限定条件,因为我宁愿把它直白地讲出来,也不愿让通知听起 来比实际更严重:此问题只影响这样的网站:您的某个 Ultimate Member 注册或个人资料表单向填写者提供 角色选择,并且注册向公众开放。标准的 Ultimate Member 设置不会在注册表单上放置角色选择器(必 须由管理员刻意添加),因此许多运行受影响版本的网站根本不会暴露。我可以从公开文件读取您的插件版 本,但无法看到您的表单是如何构建的,也无法看到注册是否开放,因此本通知是一个预防性的提醒,而不是 对您网站的已证实结论。

关于紧迫性说一句,因为这是一份有条件的通知。如果您的 Ultimate Member 表单都不允许访客选择角色,更 新只是普通的插件维护。如果其中一个允许,且注册开放,请将更新视为优先事项:在那种配置下,一个为自 己注册账户的访客可以为该账户分配更高的权限,可能达到相当于管理员的级别,而无需事先拥有您网站的任 何访问权。在适用的场合,这是一个严重的后果,这也是我写信而不是将其归为低优先级的原因;但它只在上 述条件下适用,而更新无论如何都会消除它。

这是一个插件缺陷,不是 WordPress 核心缺陷。如果 Ultimate Member 插件本身处于受影响版本,完全 最新的 WordPress 并不能保护您。

这封邮件是真实的吗?

是的。这是一位独立安全研究人员出于善意、负责任披露的通知。我不会向您索要金钱、密码或网站的访 问权限,也没有试图入侵它、在其上注册或利用任何东西。

我所做的只是查看您的网站向每位访客提供的页面和文件(就像您的主页是公开的一样),并记下插件公布的 版本号。我特意没有创建账户、提交任何注册或个人资料表单、登录,也没有向受影响的功能发送任何内 容。这项检查完全不触及您的数据、您的管理后台或您网站的任何私有部分(详见下方 我做了什么、没做什么)。

如果您想核实我的身份,请查看本页底部的联系方式和关于页面。

为什么这很重要

Ultimate Member 为大量 WordPress 网站构建注册、登录和会员资料页面。当有人注册时,插件决定其新账户 应拥有什么角色。在提供角色选择器的表单上,它应当只接受该表单被配置为允许的那些角色。

在受影响的版本中,当此类表单的允许角色列表最终为空时,插件不再丢弃访客提交的角色。相反,它保留该 值,并只将其与您网站恰好拥有的角色核对,而不是与该表单本应提供的角色核对。后果是:一个为自己注册 账户的访客可以将账户引向一个本不应获得的角色,最高可达相当于管理员的级别。

前提条件再重复一遍,因为这是最容易被朝任一方向误读的部分:这需要公开表单上的角色选择器,以及开 放的注册。两者都不是默认设置。Ultimate Member 的原生注册表单不带角色字段,因此在典型安装上这里 没有可利用之处。而在管理员添加了角色字段并保持注册开放的地方,门槛只取决于谁能提交该表单:在注册 开放的情况下,那就是任何人。

我只把此事描述到网站所有者采取行动所需的程度,不再深入。我不会公布可能让人复现它的细节,也请您不 要对自己或他人的网站进行尝试。按照下文所述读取您的版本号并检查您自己的表单,就足以让您决定该怎么 做。

如果我的邮件提到了此问题,意味着您的网站报告的版本处于 2.6.7 至 2.12.1 范围内。我没有测试您的特定 网站是否可被利用,也无法看到您的表单是如何构建的。我观察到的只有版本。

我受影响吗?

由两个问题决定,按此顺序。

第一:您的任何表单是否提供角色选择器,且注册开放?

这是决定性的问题,只有您能回答,因为它取决于您的表单是如何构建的,而这从外部不可见。检查完全安 全,也是本页面的全部意义所在。

  1. 在您的 WordPress 仪表盘中,进入 Ultimate Member,然后进入表单(Forms),逐一打开您的每 个注册和个人资料表单。
  2. 检查每个表单的字段,寻找角色选择字段(让注册者选择角色的下拉菜单或选项组,有时标注为“角 色”)。大多数网站没有此字段,因为标准注册表单不包含它。
  3. 检查注册是否向公众开放:设置,然后常规,然后成员资格中的“任何人都可以注册”复选 框(WordPress 核心),以及您的 Ultimate Member 注册表单是否可被访客访问。
  4. 如果没有任何表单提供角色选择器,此问题就影响不到您的网站,即便运行的是受影响版本;不过作为 普通维护,更新仍然值得。
  5. 如果任何一个表单提供角色选择器且注册开放,请将更新视为优先事项(见 如何升级)。如果无法立即更新,临时措施是从任何面向公众的注册或个人资料表 单中移除角色字段,或关闭公开注册,直到完成更新。真正的修复是更新。

请不要对自己或他人的网站尝试复现该问题;回答上面的问题并不需要这样做。

第二:您正在运行哪个版本?

您不必只听我的一面之词。有两种公开方式和一种仪表盘内方式可以读取您的版本,它们应当一致。

从 WordPress 管理后台(权威):

  1. 登录您的 WordPress 仪表盘(通常在 yourdomain.com/wp-admin)。
  2. 进入插件,然后已安装的插件
  3. 找到 Ultimate Member(其文件夹为 ultimate-member 的条目),记下其名称下方显示的版本。

从公开清单(无需登录):在浏览器中打开

yourdomain.com/wp-content/plugins/ultimate-member/readme.txt

并读取靠近顶部的 Stable tag:(稳定版本)行。这就是我读取的公开来源。如果该地址返回“未找 到”,请尝试大写的 README.txt:有些主机区分大小写,少数软件包以大写文件名分发该文件。

从您的页面源代码(无需登录):查看主页的源代码,寻找插件自身的样式表,路径正是以下这些:

/wp-content/plugins/ultimate-member/assets/css/um-styles.min.css?ver=...
/wp-content/plugins/ultimate-member/assets/css/um-profile.min.css?ver=...

附加在这些文件上的 ?ver= 数字才是插件自身的版本。Ultimate Member 默认在每个前台页面加载这些 样式表,无论页面是否显示会员区域,因此通常查看主页就足够了。

这里要避开的陷阱,而且很容易踩中。Ultimate Member 在其自身插件文件夹内捆绑了若干第三方库 的副本,每个库都带有自己的、完全无关的版本号。您的页面源代码可能显示图片裁剪库为 ?ver=1.6.1、 Font Awesome 为 ?ver=6.5.2、Select2 为 ?ver=3.6.2,它们的路径都以 Ultimate Member 插件文件夹 开头。运营者若在页面源代码中搜索插件文件夹并读取出现的第一个 ?ver= 值,很容易带走其中一个与插件 版本毫无关系的数字。只从插件自身的 um- 样式表(um-stylesum-profileum-account 等)读取 版本,忽略页面上任何其他 ?ver=。如果您根本无法从页面源代码中得到可读的数字,这很常见,也不说明 任何问题:缓存和优化插件经常会去掉 ?ver= 值;那就改用 readme.txt 或管理后台界面。

然后应用这条规则,并注意版本是按数字而非字母比较的,因此 2.12.1 比 2.6.7 更新,尽管“12”作为文 本看起来比“6”小:

  • 2.6.7 至 2.12.1:受影响,取决于上面的表单问题。请更新到 2.13.0 或更高版本。
  • 2.13.0 或更新:就此问题而言已修复。采用最新的可用版本是最佳做法。
  • 早于 2.6.7 的任何版本:不受此问题影响。作为普通维护,更新仍然值得。

如何升级

该插件是免费的,仍在发布并得到积极维护,因此修复就是一次正常更新。最安全的途径是通过 WordPress 本 身更新,并先做好备份:

  1. 在做任何更改之前备份您的网站(文件和数据库)。大多数托管服务商提供一键备份,或使用 WordPress 备份插件。
  2. 在 WordPress 管理后台,进入仪表盘然后更新,或插件然后已安装的插件。如果列出了 Ultimate Member 更新,从这里安装它。
  3. 如果您偏好命令行,WP-CLI 可以完成同样的事情: wp plugin update ultimate-member(该命令使用文件夹名称,而不是显示名称)。
  4. 如果没有出现更新,您可以直接从 WordPress.org 目录中该插件的页面获取最新版本, Ultimate Member,然后 通过插件安装插件上传插件进行更新。
  5. 更新后,用上面的步骤确认新版本号(2.13.0 或更高),并注册一个测试账户(或检查现有的会员和注册 流程),确保它们仍按预期工作。

顺便值得确认 WordPress 核心和您的其他插件也都是最新的,因为同样的原则适用于所有插件。

更新之后:它是否已被用来针对您?

更新到 2.13.0 或更高版本即可关闭该问题,对许多网站来说这就是全部任务。本页面是预防性通知,不是事 件报告:我无法得知您的网站上是否发生过任何事情,也没有去查看。

有一项后续检查值得做,它同样取决于上述表单问题。由于此问题在适用时的结果是一个拥有更高权限的 账户,如果您的网站在运行受影响版本期间有一个提供角色选择器的注册或个人资料表单,且注册开放,那么 值得确认没有人利用它创建了不该存在的账户:

  • 检查您的用户账户,尤其是管理员。用户然后所有用户中,按管理员(以及任何其他高 权限角色)筛选,寻找您不认识的账户,或在您使用受影响版本期间前后创建的账户。特别注意角色高于普 通会员的新近注册用户。
  • 如果发现无法解释的账户,请按处理任何疑似未授权访问的方式对待它:删除或降级该账户,强制您的 管理员重置密码,如果您的组织有 IT 安全团队,请让他们参与。
  • 如果一切看起来正常,尤其是如果本来就没有表单提供角色选择器,仅更新就足够了。

关于定性要说清楚:这是一次自查,不是宣称您的网站遭到了攻击。本通知基于一个版本号,而非任何事件证 据。

我做了什么、没做什么

为了对我邮件背后的检查完全透明:我只读取了您的网站本来就向每位访客提供的文件,具体是您的主页及其 中写入的 Ultimate Member 样式表地址,以及位于 wp-content/plugins/ultimate-member/ 内的插件公开 readme.txt。我没有访问您的 WordPress 管理后台、数据库、表单配置或网站的任何私有部分。

尤其是,我从未创建账户、从未提交您的注册或个人资料表单、从未登录,也从未向受影响的功能发送任何 内容。没有提交、测试或利用任何东西。这一点在这里很重要,因为提交注册几乎正是此问题所涉及的那个 动作,所以“我没有碰它”正是披露与入侵之间的全部区别。

我也刻意不公布可能帮助他人利用此问题的细节。上面的描述止步于网站所有者所需的程度,我也不链接任何 概念验证代码。

这是一项基于版本的观察:您的网站报告的版本处于 2.6.7 至 2.12.1 范围内。这并不是说您的网站在我 检查时是可被利用的。由于此问题取决于您的表单如何构建以及注册是否开放(这些我看不到),处于受影响 范围内的网站完全可能根本没有暴露,该范围内的网站也可能通过其他手段获得保护,例如 Web 应用防火墙或 向后移植的修复。如果您已经更新,或已通过其他方式修复,则无需采取任何行动,同时我为打扰致歉。

我没有网站管理员 / 我卡住了

如果您不是维护该网站的人,请将本页面转发给负责维护的人(您的网站开发人员、代理机构或托管服务 商)。他们会很快认出上面的步骤。

如果您自己维护网站且遇到困难,我很乐意免费为您指明方向。请使用下面的联系方式与我联系。

联系方式

Evan Harris,安全研究员

我就此类问题主动联系,纯粹是为了帮助运营者保护他们的网站。如果您不希望再次被联系,只需告诉我,我 会尊重您的意愿。

参考

官方通告与跟踪

供应商 / 插件