CVSS9.8拉满!WordPress两大主流插件曝高危漏洞,黑客是如何实现无验证RCE的?

admin 2026-08-21 06:30:55 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了WordPress生态中两个CVSS9.8高危漏洞:Forminator插件任意文件上传RCE(CVE-2026-15748)和UserProfileBuilder插件认证绕过提权(CVE-2026-15826)。前者利用MIME类型绕过和配置注入实现无验证远程代码执行;后者因absint()错误使用导致对象转整数1,使攻击者获得超级管理员权限。建议立即升级插件至修复版本并定期备份。 综合评分: 92 文章分类: 漏洞分析,web安全,渗透测试,实战经验


CVSS 9.8拉满!WordPress两大主流插件曝高危漏洞,黑客是如何实现无验证RCE的?

原创

Hankzheng Hankzheng

技术修道场

2026年8月19日 08:00 广东

在小说阅读器读本章

去阅读

大家好,不知道大家的WordPress站点都打补丁了没?最近几天,WordPress 生态接连爆出两个CVSS评分高达 9.8 的超高危漏洞。9.8分是什么概念?这意味着无需身份验证、远程利用、且能导致服务器完全沦陷

今天我就带大家扒一扒这两个漏洞,从底层代码逻辑来看看,这帮黑客到底是用什么“骚操作”绕过防御机制的。不管你是做 Web 安全研究,还是写 PHP 业务代码,这篇硬核解析绝对能让你有所启发!


💣 漏洞一:Forminator 插件无验证 RCE (CVE-2026-15748)

我们先来看第一个“大瓜”。主角是 Forminator Forms,一个装机量超过 60 万的表单构建插件。

Wordfence 团队(发现者是安全研究员 daroo)前几天披露,在 1.56.1 及之前的版本中,存在一个极其致命的任意文件上传漏洞。只要你的表单里同时包含了文件上传字段(File Upload)下拉选择字段(Select),攻击者就能上传恶意的 PHP 脚本,直接 RCE(远程代码执行)拿下服务器。

🔍 技术深扒:为什么防线会全面崩溃?

大家都知道,处理文件上传可是个精细活。那么 Forminator 是怎么翻车的呢?问题出在核心的 handle_file_upload() 函数上。

1. 脆弱的黑名单验证与 MIME 类型绕过 在正常逻辑下,插件会用一个“危险扩展名黑名单”来阻挡 .php 文件的上传。但是,Forminator 的代码里实行的是精确键名匹配(exact-key matching)。 攻击者是怎么玩的?他们利用了 MIME 类型键名的管道符(pipe-alternative)替换特性。简单来说,攻击者构造了非标准的、带有 | 分隔符的 MIME 类型键名,直接把黑名单的精确匹配给“晃”过去了,导致恶意扩展名没有被成功拦截。

2. 伪造 Select 字段注入上传配置 光绕过扩展名还不够。这个漏洞最精妙的点在于:它的公共提交处理程序(submission handler)竟然盲目信任了前端传来的数据! 攻击者可以通过伪造表单中 Select 字段的值,将由攻击者控制的上传字段配置直接注入到后端的处理逻辑中。这就相当于黑客自己给自己发了一张“VIP通行证”,让服务器按黑客的规则来处理这个文件。

3. 致命的条件:.htaccess 保护失效 看到这里可能有兄弟会问:“WordPress 不是默认会在上传目录生成一个限制 PHP 执行的 .htaccess 文件吗?” 没错!如果你用的是默认配置,这层底线还能保你一命。但是!如果你在后台配置了自定义文件上传存储根目录(Custom File Upload Storage),这个保护机制就失效了。 因为这个自定义目录下的 .htaccess 文件是“惰性生成”的——只有在首次前端请求且加载了特定的 WP 助手类时才会生成。攻击者只要在它生成之前,直接向上传好的 PHP 后门发起 HTTP 请求,Web 服务器就会乖乖执行代码。至此,网站彻底易主。


🤯 漏洞二:一个 absint() 引发的血案 (CVE-2026-15826)

如果说第一个漏洞是复杂的逻辑组合拳,那么第二个漏洞绝对会让你大跌眼镜,甚至有点哭笑不得。

这次的主角是装机量 4 万+ 的 User Profile Builder 插件。这是一个认证绕过与提权漏洞,只要管理员开启了“自动登录(Automatically Log In)”功能,攻击者就能直接以 User ID 为 1 的身份(也就是网站最高管理员)登入后台

🔍 技术深扒:对象转型的魔幻现实主义

这个漏洞的成因,绝对可以写进 PHP 安全审计的反面教材里。问题出在 wppb_log_in_user() 这个函数里。

来看一下大概的代码执行逻辑。正常的注册流程是这样的:插件调用 WordPress 核心函数 wp_insert_user() 来创建用户,然后验证是否成功。

但开发老哥在写代码时,犯了一个极其致命的顺序错误。他用 absint() 对返回值进行了强制类型转换,才调用 is_wp_error() 去检查有没有报错!

攻击复现路径如下:

  1. 攻击者提交一个超级长(61 到 70 个字符之间)的用户名进行注册。

  2. WordPress 核心一通校验,发现用户名太长,拒绝注册,并返回一个 WP_Error 对象

  3. 接着,插件代码把这个 WP_Error 对象传给了 absint()(这个函数的作用是将变量转换为非负整数)。

  4. 高潮来了兄弟们!

    在 PHP 和 WordPress 的处理逻辑中,如果你把一个对象强制转换成整数,它通常会被转换为数字 1

  5. 原本用来拦截错误的 is_wp_error() 还没来得及发力,对象就已经变成了整数 1。错误检查直接失效。

  6. 插件拿到这个返回的 1,以为注册成功,并且以为当前用户的 ID 就是 1!随后,插件高高兴兴地为 User ID 1 生成了一个持久化的自动登录凭证(autologin nonce)。

就因为一行代码的顺序放反了,外加 PHP 动态类型的“魔法”,攻击者不仅注册失败了,还莫名其妙地拿到了超级管理员的登录 Token。这找谁说理去?


🛡️ 总结与防御建议

这两个漏洞生动地向我们展示了 Web 安全攻防中的两个核心:复杂的输入控制(MIME 与配置注入) 以及 严谨的数据类型与错误处理。哪怕是几百万行代码的大项目,一个小小的强转函数、一个惰性加载的配置文件,都可能成为撕裂整个系统的突破口。

如果你是站长或者运维兄弟,请立刻马上采取以下行动:

  • 检查是否安装了 Forminator,如果有,立刻升级到 1.56.2 或更高版本(官方已在 2026 年 7 月 31 日修复)。
  • 检查是否安装了 User Profile Builder,如果有,立刻升级到 3.16.5 或更高版本(官方已在 2026 年 7 月 16 日修复)。
  • 养成定期全量备份数据库和站点的习惯,不要抱有侥幸心理。

安全无小事,代码需谨慎。对于开发兄弟们来说,处理任何不可信的用户输入和外部函数的返回值时,严格的类型校验和严密的执行顺序真的是重中之重。

好了,今天的硬核技术分享就到这里。如果这篇复盘对你有所帮助,别忘了点赞、收藏、转发,支持一下你的技术博主!我们下期再见,Peace!✌️


WordPress漏洞 #RCE #任意文件上传 #CVE-2026-15748 #CVE-2026-15826 #权限绕过 #PHP安全审计 #Web安全 #漏洞复现


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:技术修道场 Hankzheng Hankzheng《CVSS 9.8拉满!WordPress两大主流插件曝高危漏洞,黑客是如何实现无验证RCE的?》

评论:0   参与:  0