WordPress插件Forminator未认证短代码执行漏洞(poc已公开)CVE-2026-92229"

admin 2026-10-16 09:34:52 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

WordPress插件Forminator未认证短代码执行漏洞(poc已公开)CVE-2026-92229

YGnight
YGnight

night安全

2026年9月24日 08:00
四川

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

一、漏洞描述

Forminator Forms 是一个WordPress的表单插件,联系表单、支付收款、测验和投票等,插件声明需要 WordPress 6.4 起。近期被爆出存在未授权任意段代码执行漏洞,漏洞产生的入口挂在 WordPress 的 admin-ajax.php 上,注册钩子时同时挂了 nopriv 分支,不检查有没有登录。

受影响区间是 1.57.2 及之前所有版本,1.57.3 修掉,发布时间 9 月 17 日。

站点得开着测验模块才踩到这条分支,只摆一个联系表单的不在命中范围内。

CVE 编号 CVE-2026-92229
漏洞类型 未认证任意短代码执行,CWE-94
影响组件 Forminator Forms 插件测验模块的 quizzes/front/front-action.php 结果渲染,以及 abstracts/abstract-class-front-action.php 的 POST 数据入口
受影响版本 1.57.2 及之前全部版本
修复版本 1.57.3,WordPress 插件仓库 changeset 3700724
请求入口 /wp-admin/admin-ajax.php,action 为 forminator\_submit\_form\_quizzes 与 forminator\_submit\_preview\_form\_quizzes
触发前提 站点启用了测验模块,攻击方能从页面解析出测验答案,或手工填入 answers 参数
危害面 以站点已注册短代码的执行结果为上限,取决于同装的插件与主题
CVSS 9.1,CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

二、漏洞原理

WordPress 的 AJAX 钩子留了两套。

WordPress 给 admin-ajax.php 的请求留了两套钩子,wp\ajax\ 走登录用户,wp\ajax\_nopriv\ 对所有人开放,Forminator 两个都挂上了。

表单提交那一段卡着 nonce 校验,看着像把外人挡在外面。

插件自己留了一个取 nonce 的接口,同样挂在 nopriv 上,任何人 POST 一次带 action 与 form\_id 的请求就能换到有效值。

// library/abstracts/abstract-class-front-action.php   1.57.2
139  add\_action( 'wp\_ajax\_forminator\_get\_nonce', array( $this, 'get\_nonce' ) );
140  add\_action( 'wp\_ajax\_nopriv\_forminator\_get\_nonce', array( $this, 'get\_nonce' ) );

1217  public function get\_nonce() {
1218    $form\_id = filter\_input( INPUT\_POST, 'form\_id', FILTER\_VALIDATE\_INT );
1219    wp\_send\_json\_success( wp\_create\_nonce( 'forminator\_submit\_form' . $form\_id ) );
1220  }   // 返回的正是 54 行那次校验要用的值

拿到这个 nonce,再拼一个 action 为 forminator\_submit\_form\_quizzes 的 POST 请求就够了。

测验答案能从页面 HTML 里抠出来。预览接口同走一条路,action 换成 forminator\_submit\_preview\_form\_quizzes,还不用落库。

再看 current\_url 这条线。

所有 POST 字段进来只过一遍通用的递归清洗,current\_url 没有专属处理。

// library/abstracts/abstract-class-front-action.php   1.57.2
973  $post\_data = Forminator\_Core::sanitize\_array( $\_POST );

// library/modules/quizzes/front/front-action.php   1.57.2
60   if ( empty( self::$prepared\_data['current\_url'] ) ) {
61      self::$prepared\_data['current\_url'] = forminator\_get\_current\_url();
62   }

岔子出在测验结果的渲染。

社交分享那一段把 current\_url 塞进了 data-url 属性,外面套的是 WordPress 自带的 esc\_url。

// library/modules/quizzes/front/front-action.php   1.57.2
835  <ul class=\"forminator-social--icons\"
836      data-message=\"<?php echo esc\_textarea( $result\_message ); ?>\"
837      data-url=\"<?php echo esc\_url( self::$prepared\_data['current\_url'] ); ?>\">

869  $knowledge\_result\_html = ob\_get\_clean();
870  $knowledge\_result\_html = do\_shortcode( $knowledge\_result\_html );

esc\_url 管方括号,转的是主机名之后那一段。

本地按 WordPress 6.4 的 esc\_url 实现复算了一遍,位移一个字符就翻样。

// 本地复算,未在本站点 WordPress 上执行
https://target/[caption]x[/caption]    ->  https://target/%5Bcaption%5Dx%5B/caption%5D
https://target[caption]x[/caption]     ->  https://target[caption]x[/caption%5D
https://target[shortcode]                 ->  https://target[shortcode]

载荷往前挪,落在 parse\_url 认作主机名的地方,方括号就整段留着。

真正要命的还在下面一行。

第 870 行把整段结果 HTML 丢进了 do\_shortcode。

这个函数按方括号标记的写法去找站点注册过的短代码,跑一遍回调,拿返回值替换原文。

分享属性里那点内容,就此从一段装饰用的地址变成了会执行的东西。

能跑到什么程度,看站点还装了哪些插件与主题。

1.57.3 改了两处。

// library/modules/quizzes/front/front-action.php   1.57.3
    <?php echo wp\_kses\_post( wpautop( do\_shortcode( $text ), true ) ); ?>
    // 870 行那次对整段缓冲的 do\_shortcode 整行删除

// library/abstracts/abstract-class-front-action.php   1.57.3
    $post\_data = self::sanitize\_post\_current\_url( $post\_data );

protected static function sanitize\_post\_current\_url( $post\_data ) {
        if ( empty( $post\_data['current\_url'] ) ) {
            return $post\_data;
        }
        $current\_url = esc\_url\_raw( wp\_unslash( $post\_data['current\_url'] ) );
        $current\_url = strip\_shortcodes( $current\_url );
        $post\_data['current\_url'] = $current\_url;
        return $post\_data;
    }

短代码的执行范围从整段 HTML 缩到结论文字那一块。

current\_url 在进业务之前先做一次地址归一,再用 strip\_shortcodes 把短代码捞掉。

官方在注释里交代了为何没直接删方括号,查询串里的数组写法与 IPv6 字面地址都用得上。

三、修复建议

升到 1.57.3 或更高

近期值得重点关注的漏洞预警

【紧急漏洞预警】nacos爆出权限绕过漏洞,可以创建管理员账户,经过分析有点出处(已复现,exp脚本已编写)

WordPress插件Authorizer存在权限提升漏洞(POC已公开)CVE-2026-81294

WordPress插件MStoreAPI存在认证绕过漏洞(POC已公开)CVE-2026-13447

CakePHP爆出SQL注入漏洞(POC已公开)CVE-2026-77635

Node.js模块proxy-addr爆出严重漏洞CVE-2026-90711

Langflow爆出代码执行漏洞CVE-2026-17633  (POC已公开)

Apache CVE-2026-42536,补它只用一行,洞龄十四年

【紧急】搜狗输入法爆出远程代码执行漏洞CVE-2026-51990  ,已被在野利用

【紧急】无需登录就能获取 GitLab 的任意文件数据(附POC)

【紧急】JumpServer堡垒机被公布Access Key泄露漏洞,可以实现提权

Spring Cloud Azure公布严重漏洞 无需任何权限即可取得登录会话

【漏洞POC已公开】Linux RDS 爆出提权漏洞 一块内存放两次,root就到手了

Tenda光猫爆出严重漏洞,目前无补丁(POC已公布

13 行补丁,堵住Linux能拿 root 的内核洞(EXP已公开)

48 字节,换走一台 Windows 的 SYSTEM(CVE-2026-62735漏洞POC已公开)

【漏洞预警】linux删个网桥就能提权root?目前没有补丁(POC已公开)

【漏洞预警】Linux三年前补上的洞,又一次被挖开了

【情报】支付宝8.2亿数据泄露?给同事说一声,别自己吓自己

【漏洞预警】自己注册个号,就能搬空别人的 Magento 订单和支付卡(POC已公开)

【漏洞预警】Next.js 爆出新漏洞,不用登录实现命令执行(POC已公开)

【漏洞补丁绕过预警】Redis CVE-2026-23479变种高危漏洞,EXP已公开

【漏洞补丁绕过】超 30 万 WordPress 站点受影响,Forminator 文件上传漏洞(附POC)

【漏洞预警】Exchange爆出RCE漏洞,利用Exchange 帮另一台 Exchange 开门(POC已公开)

【漏洞预警】不用登录,一个请求就能让 GeoServer 乖乖执行命令(POC已公开)

【漏洞预警】Keycloak不登录就能接管任意账户,双重验证也拦不住

【漏洞预警】 8月WebLogic公布了9个漏洞,有一个需要重点关注

【漏洞预警】近期MongoDB 公布了5个漏洞,最严重的一个可以不认证、远程就能拿下你电脑

【0DAY漏洞】 全球5G手机芯片厂商之一‌的紫光展锐SOC存在RCE漏洞,影响数十家手机厂商,还未发布补丁

【漏洞告警】安卓 14 到 16 全中招,通讯录 SQL 注入漏洞正在抄家(POC已公开)

【漏洞预警】紧急排查,SMB服务再曝新漏洞,利用脚本已公开

【漏洞预警】不用输密码,对方已经接管你的Mac:官方补丁公布macOS存在未鉴权RCE漏洞

【0day漏洞预警】MariaDB 13 爆 9.8 分 RCE 链:最低 USAGE 权限就能远程执行命令

VMware 爆 5 个洞,两个 9.8 不用密码就能打穿 vCente


APK逆向后到底能看到什么?这份\"看文件\"指南请收好" 网络安全文章

APK逆向后到底能看到什么?这份\"看文件\"指南请收好"

本文是一份APK逆向分析实用指南,核心观点是逆向并非通读全部代码,而是快速定位关键文件。文章详细解析了AndroidManifest.xml、smali代码、lib目录、assets资源等关键位置的查看重点,并指出加壳App的典型特征及应对思路。文章提供了可操作的具体检查项,对安全测试人员具有实用参考价值,同时强调需在授权范围内进行测试。
F-35零部件迷案:“失联”备件如何震动五角大楼与国会山——一场横跨太平洋的物流意外,正演变为对美军最昂贵武器项目管控能力的灵魂拷问" 网络安全文章

F-35零部件迷案:“失联”备件如何震动五角大楼与国会山——一场横跨太平洋的物流意外,正演变为对美军最昂贵武器项目管控能力的灵魂拷问"

这篇报道讲述2026年9月一批F-35零部件从澳大利亚运往美国维修途中被意外转运至香港,部分部件下落不明,可能包含隐身技术相关的座舱盖,事件引发美国国会、五角大楼和澳大利亚的政治震荡,暴露了美军最昂贵武器项目供应链监管漏洞,成为F-35项目的最新信任危机。
deeplink参数注入" 网络安全文章

deeplink参数注入"

本文系统阐述AndroidDeepLink参数注入漏洞的测试方法,涵盖漏洞原理、常见类型、完整测试流程及白名单绕过技巧。文章提供从信息收集、基础触发到Payload扩展的实战步骤,并给出恶意HTML与POCApp验证方案,对移动安全测试人员具有较强实操参考价值。
评论:0   参与:  0