如果您收到了我发来的指向此页面的电子邮件,是因为您的网站似乎正在运行 Forminator Forms(由 WPMU DEV 开发的 WordPress 插件,位于您的文件 /wp-content/plugins/forminator/ 中)的一个版本,该版本处于已知安全问题的受影响范围内。本页面解释了该问题是什么、如何判断它是否适用于您的网站、如何正确读取您的版本而不被误导,以及如何更新。

在其他一切之前,关于此通知最重要的事实是:处于受影响范围内的版本本身并不意味着您的网站已暴露。 下面的问题仅在表单包含文件上传字段的网站上才会出现,而且我无法从外部查看您的表单是如何构建的:

  • 该问题仅影响 包含文件上传字段 的 Forminator 表单。如果您的任何表单都不允许访客上传文件,那么即使版本受影响,此问题也不影响您。
  • 请注意,重要的是 存在 上传字段,而不是它的配置方式。将字段限制为特定类型(例如图片或 PDF)不会 解决此问题,因为该漏洞会绕过该限制。让您脱离受影响范围的情况是:您的任何表单中都没有文件上传字段。

我可以从公共文件中读取您的插件版本,但我无法读取您的表单,因此此通知是一种预防性的提醒,而不是关于您网站的确认性发现。

该问题是 CVE-2026-15748,这是插件表单处理中的一个未经身份验证的文件上传漏洞。它影响 1.18.1 到 1.56.1 版本,并在 1.56.2 版本中修复,该版本于 2026 年 7 月 30 日发布。如果您正在运行受影响版本,请将 Forminator Forms 更新到 1.56.2 或更高版本(撰写时的当前发布版本在 1.57.x 系列中)。

关于紧迫性,说明一点:这是一条有条件的通知。如果您的任何表单都没有文件上传字段,更新只是普通的插件维护。如果其中有一个包含该字段,请将此更新视为优先事项:在这种配置下,该漏洞可能让一个完全没有账号的访客,把自己选择的文件保存到您的服务器上,而服务器随后可能会运行这种文件,从而导致网站被完全控制。

这是一个 插件 漏洞,而不是 WordPress 核心漏洞。即使 WordPress 完全保持最新,只要 Forminator 插件本身处于受影响版本,也 不会 保护您。

这封邮件是真实的吗?

是的。这是独立安全研究人员发出的善意、负责任披露通知。我 不会 向您索要金钱、密码或网站访问权限,我也 没有 尝试破解它、提交您的任何表单或向其上传任何内容。

我所做的只是查看您的网站向每位访客公开可见的文件(与您的主页公开的方式相同),并记录插件发布的版本号。我特意 没有 提交任何表单,没有上传文件,也没有靠近插件的上传处理程序。此检查的任何部分都不会触及您的数据、您的后台或您网站的任何私有部分(更多详情见下方的 我做了什么、没做什么)。

如果您想验证我的身份,请参阅此页面底部的联系方式和 关于 页面。

为什么这很重要

Forminator 让您能够构建联系表单、测验、投票和支付表单,其中一些表单可以为访客提供文件上传字段,以便他们附加文档或图片。为了保持安全,插件本应控制它接受哪些文件以及将它们存储在哪里。

在受影响版本中,这些控制措施是可以被绕过的。精心构造的表单提交可以将伪造的字段值混入插件保存条目的环节,并借此进入文件保存例程;而该例程用于禁止特定文件类型的列表可以被特殊构造的请求绕过。结果是,插件本应拒绝的文件可能被写入您的上传目录。当服务器随后将该文件当作可运行的内容处理时,陌生人的文件就会在您的网站上运行。

由此产生两点结论,它们的方向相反。第一点是,这仅在表单实际上具有文件上传字段时才重要;表单不收集任何上传内容的网站无法通过此问题被触及。第二点是,当此类字段 确实 存在时,不需要账号、不需要密码、也不需要任何人的合作:表单按设计对公众开放。这里最容易被误读的部分是:将该字段限制为“仅限图片”或“仅限 PDF”并不能保护您,因为该漏洞会绕过字段自身的类型检查。问题仅仅是:您的任何表单上是否存在文件上传字段。

我以网站所有者需要采取行动的水平描述这一点,不再深入。我不会发布允许他人重现此问题的细节,我也希望您不要尝试在自己的网站或他人的网站上进行尝试。按照下面的描述检查您的表单和版本,会告诉您决定采取什么行动所需的一切信息。

如果我的电子邮件引用了此问题,这意味着您的网站报告的版本处于受影响范围内。我没有测试您的特定网站是否可利用,我也无法查看您的表单是如何构建的。我所观察到的只是版本。

我受影响吗?

两个问题按顺序决定这一点。

第一步:是否有任何表单具有文件上传字段?

这是决定性的问题,只有您能回答它。检查您自己的表单是完全安全的,也是本页面的全部目的。

  1. 登录您的 WordPress 仪表盘,在侧边栏中打开 Forminator,然后是 Forms(表单)。
  2. 打开每个表单,查找 Upload 字段(Forminator 的文件上传字段类型)。
  3. 如果您的所有表单都 没有 上传字段,那么即使版本受影响,此问题也不会影响您的网站,尽管作为普通维护仍值得更新。
  4. 如果 任何 一个表单具有上传字段,则此问题适用于您,您应立即更新。将该字段限制为您实际需要的文件类型是好做法,但这 不是 此问题的修复方法:更新才是修复方法。

请不要尝试在自己的网站或他人的网站上重现问题;您不需要这样做即可回答上述问题。

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

您不必相信我的话。对于此插件,有几种检查方法可能会误导您,因此值得仔细阅读这部分。

从 WordPress 后台查看(权威来源):

  1. 在您的 WordPress 仪表盘中,进入 插件,然后是 已安装的插件
  2. 找到 Forminator Forms,其文件夹为 forminator 的条目,并记下其名称下方显示的版本。

从页面源代码查看(无需登录): 查看您网站上显示 Forminator 表单的页面的源代码,并查找插件的前端资产,路径恰好为:

/wp-content/plugins/forminator/build/front/front.multi.min.js?ver=...
/wp-content/plugins/forminator/assets/forminator-ui/js/forminator-form.min.js?ver=...
/wp-content/plugins/forminator/assets/forminator-ui/css/forminator-icons.min.css?ver=...

附加到 forminator 文件夹下的这些文件?ver= 数字是插件自身的版本。对于此插件,它跟踪发布版本,这就是为什么我将其视为可靠的读数。请注意,资产仅出现在实际渲染 Forminator 表单的页面上,因此请检查具有表单的页面(没有表单的空白主页通常不会显示任何内容)。

这里有两个陷阱要避免。 两者都会让不加甄别的检查方式得出一个与 Forminator 无关的版本:

  • 捆绑的电话号码库。 Forminator 附带了一个名为 intlTelInput 的第三方库的副本,该库带有其 自己的 版本号 4.0.3。根据您的版本,它位于文件 assets/css/intlTelInput.min.cssassets/js/library/intlTelInput.min.js 中,这两个文件都 在 Forminator 文件夹内。如果您从其中一个读取 ?ver=4.0.3,那是库的版本,而不是 Forminator 的版本。Forminator 从未有过 4.x 版本。仅读取上面列出的文件,并将任何不以 1. 开头的版本视为“不是 Forminator 版本”。
  • 上传文件夹下的每个表单样式表。 Forminator 为每个发布的表单在类似 /wp-content/uploads/forminator/<某个值>/style-<数字>.css?ver=<一个很长的10位数字> 的路径下写入一个小样式表。那个长数字是一个时间戳,而不是版本。它位于 wp-content/uploads/ 下,而不是插件文件夹下,因此完全忽略它。

关于此插件的另一个注意事项:其捆绑的 readme.txt “Stable tag”(稳定版本)行在此处 不可靠,因为它可能落后于实际发布(1.56.1 和 1.56.2 构建都报告 1.56.0),因此与某些插件不同,该文件不会告诉您拥有的是这两个中的哪一个。后台界面和上面的资产 ?ver= 是可信的读数。

然后应用此规则,注意版本比较是 数值上 的,而不是字母上的:

  • 1.18.1 到 1.56.1: 可能受影响,取决于上述上传字段问题。立即更新。
  • 1.56.2 或更新: 就本问题而言已修复。采用最新的可用版本(撰写时的 1.57.x 系列)是最佳选择。
  • 早于 1.18.1: 不受 问题影响。上述特定弱点是在 1.18.1 中引入的。话虽如此,如此旧的版本在其他方面远远落后,从一般角度来看,更新是值得做的。

如果您无法从上述检查中获得可读的版本,这并不罕见:缓存或优化插件通常会剥离 ?ver= 值,并且资产仅出现在表单渲染的地方。第一个检查中的后台界面始终有答案。

如何升级

该插件免费,仍在发布中,并得到积极维护,因此修复方法是一次常规更新。最安全的做法是通过 WordPress 本身进行更新,并先进行备份:

  1. 在做出更改之前备份您的网站(文件和数据库)。大多数主机提供商提供一键备份功能,或者您可以使用 WordPress 备份插件。
  2. 在 WordPress 后台,转到 仪表盘 然后 更新,或 插件 然后 已安装的插件。如果列出了 Forminator 的更新,请从此处安装。
  3. 如果您更喜欢使用命令行,WP-CLI 也可以完成同样的操作: wp plugin update forminator(该命令使用文件夹名称)。
  4. 如果没有出现更新,您可以直接从 WordPress.org 目录中的插件页面获取最新版本, Forminator Forms,然后通过 插件 然后 安装插件 然后 上传插件 进行更新。
  5. 更新后,使用上述步骤确认新版本号(1.56.2 或更高版本),并检查您的表单以及表单上的任何文件上传是否仍正常工作。

趁着在后台,也值得确认 WordPress 核心 和您的其他插件是否都已是最新版本,因为同样的原则适用于它们全部。

更新之后

更新到 1.56.2 或更高版本即可解决该问题,对于大多数网站来说,这就是全部任务。此页面是一份预防性通知,而非事故报告:我无法得知您的网站上是否发生了任何事情,我也没有查看。

值得考虑的一个后续步骤是有条件的,取决于相同的上传字段问题。如果您的网站在运行受影响版本时有一个带有文件上传字段的表单,那么理论上有可能将文件放置在您的服务器上。更新可以关闭漏洞,但它不会删除可能已经保存的任何内容,因此在这种情况下,采取一些常规预防措施是明智的:

  • 检查您的上传目录(通常在 wp-content/uploads/ 下,包括 wp-content/uploads/forminator/ 子树),查找您不认识的文件,特别是那些不是您的表单旨在接收的文档或图像类型的文件。
  • 审查您的管理员账号、最近的登录记录以及任何活动会话,查找任何您无法解释的内容。
  • 重置您的管理员账号的密码。wp-config.php 中重新生成 WordPress 的密钥和盐值是一个明智的配套步骤(新值在官方 密钥生成器 中只需一键即可获取,并且更换它们会使所有用户退出登录一次)。

如果您发现令您担忧的内容,将其视为任何其他疑似未经授权的访问进行处理是正确的回应。如果您的任何表单都没有文件上传字段,仅更新就足够了。

我做了什么、没做什么

为了完全透明地说明我邮件背后的检查过程:我只读取了您的网站已经向每位访问者提供的文件,具体来说是插件的公共 readme.txt、您的主页以及写入该页面的资产地址。我 没有 访问您的 WordPress 后台、数据库或网站的任何私有部分。

特别是,我 从未提交过您的任何表单,从未上传过文件,也从未触碰过插件的上传处理程序。没有提交、测试或利用任何东西。这比大多数此类页面更为重要,因为上传文件正是此问题涉及的确切操作,所以“我没有触碰它”是披露与入侵之间的全部区别。

我还故意不发布那些会帮助他人利用此问题的细节。上面的描述仅停留在网站所有者需要的级别,并且我没有链接任何概念验证代码。

这是一项 基于版本的观察:您的网站报告了一个处于受影响范围内的版本。这并不意味着在检查时您的网站可被利用。因为该问题取决于您的任何表单是否具有文件上传字段,而我无法看到这一点,所以处于该范围内的网站可能根本没有暴露,并且处于该范围内的网站可能已通过其他方式(如 Web 应用防火墙)单独受到保护。

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

如果您不是负责维护网站的人,请将此页面转发给负责的人(您的网站开发人员、机构或主机提供商)。他们会很快识别出上述步骤。

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

联系方式

Evan Harris,安全研究员

我就此类问题主动联系,纯粹是为了帮助运营者保护自己的网站。如果您不希望再次收到联系,请告诉我,我会遵从。

参考

官方公告与追踪

开发者 / 插件