[业内新闻动态] [【转载】] Forminator WordPress 插件漏洞可导致未经身份验证的攻击者通过上传恶意 PHP 文件实现远程代码执行

#1
image1786990906.jpg

WordPress 在插件 Forminator Forms 中披露了一项严重的安全漏洞。该插件目前拥有超过 60 万个活跃安装量,而这一漏洞可能被攻击者利用,并在受影响的网站上实现任意代码执行。

该漏洞编号为 CVE-2026-15748,并且CVSS 评分为满分 10.0 中的 9.8 分。一名使用网名 “daroo” 的安全研究人员发现并报告了该漏洞。

Wordfence 在今天发布的一份报告中表示:“该漏洞允许未经身份验证的攻击者向存在漏洞的网站上传任意文件,包括可执行的 PHP 文件,进而可能实现远程代码执行,并最终完全控制网站。”

不过,如果想要成功利用这一漏洞的话,有一个关键前提:目标网站上的表单必须同时包含 File Upload(文件上传) 字段和 Select(选择) 字段。

该漏洞影响 1.56.1 及更早版本的 Forminator Forms。开发者已在 2026 年 7 月 31 日发布的 1.56.2 版本中修复了这一问题。

据 Wordfence 介绍,该漏洞属于任意文件上传漏洞,并存在于 handle_file_upload() 函数中,其根本原因是插件没有对用户提交的文件类型进行充分验证。

因此,未经身份验证的攻击者可以通过提交表单,向存在漏洞的网站上传任意文件,包括经过特殊构造的 PHP 文件,并借此实现远程代码执行。攻击者一旦获得这一能力,就可能进一步接管整个网站。

Wordfence 解释称:“问题源于 handle_file_upload 中的文件类型验证不足。其黑名单采用危险扩展名进行精确键匹配,而攻击者可以利用带有管道符的替代 MIME 类型键绕过这一检查;与此同时,公开可访问的表单提交处理程序会信任攻击者通过伪造 Select 字段值注入的上传字段配置。”

这里还有一个值得注意的细节,即在默认配置下,上传的文件会被存放在一个受到 .htaccess 文件保护的目录中,该配置可以阻止 PHP 文件被执行。

但如果网站管理员配置了 Custom File Upload Storage(自定义文件上传存储)根目录,就不一定具备同样的安全保护。因为该目录中的 .htaccess 文件只有在首次需要写入文件时才会创建,而在前台请求处理过程中,负责生成 .htaccess 的 WordPress 辅助程序并不会被加载。

所以,攻击者只要访问此前上传的文件,就可能让 Web 服务器直接执行其中的恶意 PHP 代码。

在此次漏洞被披露的前几天,Wordfence 还披露了另一个存在于 User Profile Builder 插件中的严重身份验证绕过漏洞。该插件拥有超过 4 万个活跃 WordPress 安装量。攻击者无需身份验证即可利用该漏洞,并以用户 ID 1(通常就是网站管理员)的身份登录,从而接管整个网站。

该漏洞编号为 CVE-2026-15826,且CVSS 评分同样达到 9.8 分。开发者已于 2026 年 7 月 16 日发布的 3.16.5 版本中完成修复。

此前的所有版本均受到影响,但只有启用了插件 Automatically Log In(自动登录)功能的网站才会被实际利用。

Wordfence 表示,漏洞源于 wppb_log_in_user() 函数在调用 wp_insert_user() 后,没有先检查返回值是否为错误对象,而是直接对其执行 absint()。当攻击者提交一个长度为 61 至 70 个字符的用户名进行注册时,WordPress 核心会拒绝该请求并返回 WP_Error 对象。但 absint() 会在错误检查之前将这个对象强制转换为整数 1,导致后续的错误处理逻辑被绕过。插件随后会生成并返回一个与用户 ID 1 绑定,并基于 transient 的自动登录 nonce。

Wordfence 指出:“这个漏洞使未经身份验证的攻击者能够以网站管理员账户的身份登录,并最终获得网站的完整管理权限。”

如果网站使用了上述两个插件中的任何一个,那么网站管理员都应尽快更新插件,并确认已安装的版本是最新版本,以降低遭受攻击的风险。
2026-09-17
#2

两个洞都标了满分级别的CVSS,实际危害确实不容小觑。

Forminator这个利用条件说严不严说松不松——需要表单同时带文件上传和Select字段,听起来限制挺多,但60万装机量摆在那儿,总能找到几个符合条件的站点。关键是那个自定义存储路径的坑,.htaccess保护默认生效,但如果管理员配了自定义目录就形同虚设了。实战中碰到配置了OSS或者S3存储的WordPress站点,这个点可以直接打。

User Profile Builder这个更骚,直接拿wp_insert_user返回的WP_Error对象做absint()转成用户ID 1。这个思路我在其他地方也见过,WordPress某些插件对返回值处理普遍比较糙。唯一的好消息是只有开了"自动登录"功能的站才能被实际利用,不过4万装机里中招的比例估计也不会太低。

建议就是:两个插件都赶紧升到公告里说的版本,尤其是开了自动登录功能的UPB站点。如果暂时升不了,先把自动登录功能关掉,再考虑临时用WAF规则拦一下表单提交接口。另外如果有WAF的话可以看下能不能加条规则监控.php文件在非标准目录的访问行为——这俩洞最后落脚点都是RCE,盯住Webshell落地比啥都强。