Profile Builder 安全通知
如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 Profile Builder(在 WordPress.org 上列为 “Profile Builder” / “User Profile Builder”的 WordPress 插件,由 Cozmoslabs 开发,位于您的文件 /wp-content/plugins/profile-builder/ 中)的一个版本,该版本处于已知安全问题的受影响范围内。本页面解释了该问题是什么、如何判断它是否适用于您的网站、如何正确读取您的版本而不被误导,以及如何更新。
请注意:这不是 ProfilePress。 还有一款名称相似的 WordPress 插件(ProfilePress,文件夹为 wp-user-avatar),我会另行撰写关于它的说明。如果您的插件文件夹是 wp-user-avatar 而不是 profile-builder,那么这不是您需要的页面;请改为查看 ProfilePress 通知。以下内容仅涉及 Cozmoslabs 的 Profile Builder。
在其他一切之前,关于此通知最重要的事实是:处于受影响范围内的版本本身并不意味着您的网站已暴露。 下面的问题仅在网站启用了一项特定设置时才会出现,而且我无法从外部查看您的设置:
- Profile Builder 的 “自动登录”(Automatically Log In)选项,即在新用户完成注册后立即将其登录,必须处于 启用 状态。
- 该选项 默认关闭。从未开启过该选项的网站不会受此问题影响,即使版本处于受影响范围内。
我可以从公共文件中读取您的插件版本,但我无法读取您的配置,因此此通知是一种预防性的提醒,而不是关于您网站的确认性发现。
该问题是 CVE-2026-15368,插件自动登录步骤中存在的一个未经身份验证的账号接管漏洞。它影响 2.1.4 到 3.16.3 版本,并在 3.16.4 版本中修复。如果您正在运行受影响版本,请将 Profile Builder 更新到 3.16.4 或更高版本。其 CVSS 评分为 8.1。我尚未发现该漏洞存在公开的利用代码。
关于紧迫性,说明一点:这是一条有条件的通知。如果您没有使用注册后自动登录,更新只是普通的插件维护。如果您使用了,请将此更新视为优先事项:在这种配置下,该漏洞可能让一个完全没有账号的访客,只要知道某个现有用户的电子邮件地址,就能获得属于该用户的已登录会话,包括管理员账号在内,从而导致网站控制权被夺取。
这是一个 插件 漏洞,而不是 WordPress 核心漏洞。即使 WordPress 完全保持最新,只要 Profile Builder 插件本身处于受影响版本,也 不会 保护您。
这封邮件是真实的吗?
是的。这是独立安全研究人员发出的善意、负责任披露通知。我 不会 向您索要金钱、密码或网站访问权限,我也 没有 尝试破解它、在其上注册账号,或利用任何漏洞。
我所做的只是查看您的网站向每位访客公开可见的文件(与您的主页公开的方式相同),并记录插件发布的版本号。我特意 没有 提交您的注册表单,没有创建账号,也没有靠近自动登录步骤。此检查的任何部分都不会触及您的数据、您的后台或您网站的任何私有部分(更多详情见下方的 我做了什么、没做什么)。
如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。
为什么这很重要
Profile Builder 为 WordPress 网站添加了前端注册、登录和资料编辑表单,让访客无需接触后台即可注册并管理自己的账号。它的便利功能之一是可以在新用户完成注册的那一刻自动将其登录,省去他们在单独的登录表单中再次输入密码的步骤。
在受影响版本中,这一便利功能在决定登录 哪个 账号时出了错。插件没有使用刚刚创建的账号,而是根据 注册表单中填写的电子邮件地址 查找账号,并登录该账号。如果提交的地址属于网站上已有账号的某人,那么填写表单的人就会被赋予 该现有账号 的已登录会话。
由此产生两点结论,它们的方向相反。第一点是,这仅在自动登录被开启时才会发生。设置关闭时,插件根本不会启动自动登录步骤,因此处于这种状态的网站无法通过此问题被触及。第二点是,当设置 确实 开启时,后果并不局限于普通会员:被交出的账号是与提交地址相匹配的任何账号,而管理员的地址通常并非秘密。不需要账号、不需要密码,也不需要受害者的任何配合。
我以网站所有者需要采取行动的水平描述这一点,不再深入。我不会发布允许他人重现此问题的细节,我也希望您不要尝试在自己的网站或他人的网站上进行尝试。按照下面的描述查看您的设置和版本号,会告诉您决定采取什么行动所需的一切信息。
如果我的电子邮件引用了此问题,这意味着您的网站报告的版本处于受影响范围内。我没有测试您的特定网站是否可利用,我也无法查看您的设置是如何配置的。我所观察到的只是版本。
我受影响吗?
两个问题按顺序决定这一点。
第一步:“自动登录”是否已启用?
这是决定性的问题,只有您能回答它。检查您自己的设置是完全安全的,也是本页面的全部目的。
- 登录您的 WordPress 仪表盘(通常位于
yourdomain.com/wp-admin)。 - 在侧边栏中打开 Profile Builder 菜单,然后进入 Settings(设置)。
- 查找标记为 Automatically Log In(自动登录)的开关,其说明文字为“Enable to automatically log in new users after successful registration”(启用后将在注册成功后自动登录新用户)。
- 如果该开关处于 关闭 状态,即使版本受影响,此问题也不会波及您的网站。作为普通维护,更新仍然值得进行。
- 如果处于 开启 状态,此问题就适用于您,您应尽快更新。
如果您有多个注册页面,还有一个地方需要额外检查:单独承载 Profile Builder 注册表单的页面可以拥有该设置的 独立 副本,并会覆盖全局设置。如果您维护着多个注册页面,值得逐一检查,而不是只依赖全局开关。
请不要尝试在自己的网站或他人的网站上重现问题,您也不需要这样做即可回答上述问题。
第二步:您正在运行哪个版本?
您不必相信我的话。对于此插件,有一种特定的检查方式可能会误导您,因此值得仔细阅读这部分。
从 WordPress 后台查看(权威来源):
- 在您的 WordPress 仪表盘中,进入 插件,然后是 已安装的插件。
- 找到 Profile Builder,其文件夹为
profile-builder的条目,并记下其名称下方显示的版本。
从公共清单查看(无需登录): 在浏览器中打开 yourdomain.com/wp-content/plugins/profile-builder/readme.txt。顶部附近的 Stable tag: 行就是您的安装所报告的版本,这是我读取的两个公共来源之一。
从页面源代码查看(无需登录): 查看您网站上显示 Profile Builder 表单的页面的源代码,并查找插件的前端样式表,路径恰好为:
/wp-content/plugins/profile-builder/assets/css/style-front-end.css?ver=...
附加到 该文件 的 ?ver= 数字是插件自身的版本。对于此插件,它精确地跟踪发布版本,这就是为什么我将其视为可靠的第二个读数。
这里有一个陷阱要避免,而且很容易掉入其中。 Profile Builder 在其 自己的插件文件夹内 附带了其他组件,它们携带着 自己的、无关的 版本号。位于 add-ons-free/user-profile-picture/ 下的捆绑 user-profile-picture 附加组件,在 Profile Builder 的多个版本中一直停留在 2.6.0 没有变化,还有一个位于 assets/misc/divi/ 下、编号为 1.0.0 的捆绑 Divi 集成。这两个版本号相对于 3.16.4 看起来老得吓人,但它们都与此问题毫无关系。如果您是从页面源代码中读取版本,请确保您所读取的文件路径正是 assets/css/style-front-end.css,而不是其他文件。
然后应用此规则,并注意版本比较是 数值上的,而不是字母上的,因此 3.10.0 比 3.9.9 更新,即使它作为文本看起来更小。此插件确实会在进位之前依次运行从 .0 到 .9 的每一个发布号,因此这一区别在这里很重要:
- 2.1.4 到 3.16.3: 可能受影响,取决于上述设置问题。请立即更新。
- 3.16.4 或更新: 就本问题而言已修复。撰写本文时的当前发布版本是 3.16.6,采用最新的可用版本是最佳选择。
- 早于 2.1.4: 不受此问题影响。上述具体错误是在 2.1.4 中引入的,因此确实更旧的安装版本不在其范围之内。话虽如此,如此旧的版本在其他方面已经落后多年,从一般角度来看,更新是值得做的。
如果您无法从上述三种检查中的任何一种获得可读的版本,这在此插件中很常见,并不代表任何问题:该样式表仅在实际渲染其表单之一的页面上加载,而缓存或优化插件通常会剥离 ?ver= 值。第一步中的后台界面始终有答案。
如何升级
最安全的做法是通过 WordPress 本身进行更新,并先进行备份:
- 备份您的网站(文件和数据库)后再进行更改。大多数主机提供商提供一键备份功能,或者您可以使用 WordPress 备份插件。
- 在 WordPress 后台,转到 仪表盘 然后 更新,或 插件 然后 已安装的插件。如果列出了 Profile Builder 的更新,请从此处安装。
- 如果您更喜欢使用命令行,WP-CLI 也可以完成同样的操作:
wp plugin update profile-builder(该命令使用文件夹名称)。 - 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本, Profile Builder,然后通过 插件 然后 安装插件 然后 上传插件 进行更新。
- 更新后,使用上述步骤确认新版本号(3.16.4 或更高版本),并检查您的注册、登录和资料编辑表单是否仍正常工作。
如果您运行了 Cozmoslabs 提供的任何付费 Profile Builder 附加组件,请将其与核心插件一并更新,因为它们的发布版本通常是配套的。
趁着在后台,也值得确认 WordPress 核心 和您的其他插件是否都已是最新版本,因为同样的原则适用于它们全部。
更新之后
更新到 3.16.4 或更高版本即可解决该问题,对于大多数网站来说,这就是全部任务。此页面是一份预防性通知,而非事故报告:我无法得知您的网站上是否发生了任何事情,我也没有查看。
值得考虑的一个后续步骤是有条件的,取决于相同的设置问题。如果您的网站在运行受影响版本时启用了 自动登录,那么理论上至少有可能有人被交出了某个现有账号的会话。更新可以堵住漏洞,但它不能撤销已经发生的访问,因此在这种情况下,采取一些常规预防措施是明智的:
- 审查您的管理员账号 以及任何其他重要账号,查找您不认识的条目、不再是正确所有者的电子邮件地址,或您未做出的角色变更。
- 查看最近的登录记录以及任何当前活动的会话,找出任何您无法解释的内容。
- 重置您的管理员账号的密码。 在
wp-config.php中重新生成 WordPress 的密钥和盐值是一个明智的配套步骤(新值在官方 密钥生成器 中只需一键即可获取,并且更换它们会使所有用户退出登录一次)。
如果您发现令您担忧的内容,将其视为任何其他疑似未经授权的访问进行处理是正确的回应。如果您的网站从未启用过自动登录,仅更新就足够了。
我做了什么、没做什么
为了完全透明地说明我邮件背后的检查过程:我只读取了您的网站已经向每位访问者提供的文件,具体来说是插件的公共 readme.txt、您的主页以及写入该页面的资产地址。我 没有 访问您的 WordPress 后台、数据库或网站的任何私有部分。
特别是,我 从未提交过您的注册表单,从未创建账号,也从未触碰过自动登录步骤。没有提交、测试或利用任何东西。这比大多数此类页面更为重要,因为注册正是此问题涉及的确切操作,所以“我没有触碰它”是披露与入侵之间的全部区别。
我还故意不发布那些会帮助他人利用此问题的细节。上面的描述仅停留在网站所有者需要的级别,并且我没有链接任何概念验证代码。
这是一项 基于版本的观察:您的网站报告了一个处于受影响范围内的版本。这并不意味着在检查时您的网站可被利用。因为该问题取决于一项我无法看到的设置,所以处于该范围内的网站可能根本没有暴露,并且处于该范围内的网站可能已通过其他方式(如 Web 应用防火墙或回溯移植的修复)单独受到保护。
我没有网站管理员 / 我卡住了
如果您不是负责维护网站的人,请将此页面转发给负责的人(您的网站开发人员、机构或主机提供商)。他们会很快识别出上述步骤。
如果您自己维护网站并遇到困难,我很乐意免费帮助您指明正确的方向。请使用下面的联系方式联系我。
联系方式
Evan Harris,安全研究员
- 邮箱:security@mail.mcpsec.dev
- X:@Evan__Harris
- GitHub:eharris128
- LinkedIn:Evan Harris
我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我,我会遵从。
参考
官方公告与追踪
开发者 / 插件