IPBUF安全漏洞报告
English
CVE-2026-42612 CVSS 8.5 高危

CVE-2026-42612 Grav CMS存储型XSS漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-42612
漏洞类型
存储型跨站脚本攻击 (Stored XSS)
CVSS评分
8.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Grav CMS

相关标签

XSSStored XSSGravCMSBypassWeb Security

漏洞概述

Grav是一个基于文件的Web平台。在2.0.0-beta.2版本之前,该平台存在一个存储型跨站脚本(XSS)漏洞。该漏洞允许拥有发布者级权限的账户执行任意JavaScript代码。问题的根源在于`detectXss()`函数在处理未加引号的HTML事件属性时存在黑名单绕过缺陷。攻击者可以利用此缺陷绕过安全过滤,将恶意脚本注入并存储在服务器端。当其他用户访问受感染的页面时,恶意脚本将在其浏览器中执行。该安全问题已在2.0.0-beta.2版本中得到修复。

技术细节

该漏洞的核心机制在于Grav CMS使用的`detectXss()`函数采用了不完善的黑名单过滤策略。具体来说,当处理用户输入的HTML内容时,如果HTML标签中的事件属性(如onerror, onload等)没有被引号包裹,过滤器的正则匹配逻辑可能无法识别这些属性,从而允许恶意载荷通过。攻击者只需具备publisher级别的账户权限,便可在内容编辑界面提交构造特殊的HTML标签。例如,使用`<img src=x onerror=alert(1)>`这样未加引号的属性结构,即可成功绕过检测。由于是存储型XSS,该恶意代码会持久化保存在页面中,任何后续访问该页面的用户都会触发脚本执行,进而可能导致Cookie窃取、会话劫持或进一步的权限提升。

攻击链分析

STEP 1
1. 信息收集
攻击者确定目标网站使用的是Grav CMS且版本低于2.0.0-beta.2。
STEP 2
2. 获取权限
攻击者注册或通过其他方式获取一个Publisher级别的账户权限。
STEP 3
3. 漏洞利用
攻击者在内容编辑区域输入包含未加引号事件属性的恶意HTML代码(如Payload)。
STEP 4
4. 持久化存储
由于黑名单绕过,恶意代码被保存到Grav的文件系统或数据库中。
STEP 5
5. 触发攻击
当管理员或其他普通用户访问包含该恶意内容的页面时,JavaScript代码在受害者浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for Grav CMS Stored XSS via Unquoted Attributes --> <!-- The payload bypasses detectXss() by using unquoted event handlers --> <img src=x onerror=alert('XSS')> <!-- Alternative payload using other events --> <body onpageshow=alert(document.cookie)>

影响范围

Grav < 2.0.0-beta.2

防御指南

临时缓解措施
如果无法立即升级,建议管理员暂时禁用Publisher级别账户的内容发布功能,或者部署Web应用防火墙(WAF)规则,专门拦截包含未加引号事件属性的HTML请求。同时,应严格审查所有已发布的用户生成内容,寻找并移除潜在的恶意脚本。

参考链接