CVE-2025-43775

5.4 MEDIUM

📋 TL;DR

A stored cross-site scripting (XSS) vulnerability in Liferay Portal and DXP allows remote attackers to inject malicious scripts via the remote app title field. When exploited, this can lead to session hijacking, data theft, or unauthorized actions within user sessions. Affected users include anyone using vulnerable versions of Liferay Portal 7.4.0-7.4.3.128 or Liferay DXP 2024.Q1.1-2024.Q3.5 and 7.4 GA-update 92.

💻 Affected Systems

Products:
  • Liferay Portal
  • Liferay DXP
Versions: Liferay Portal 7.4.0 through 7.4.3.128; Liferay DXP 2024.Q3.0 through 2024.Q3.5, 2024.Q2.0 through 2024.Q2.12, 2024.Q1.1 through 2024.Q1.12, and 7.4 GA through update 92
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: The vulnerability exists in the remote app title field functionality. All installations using affected versions are vulnerable unless specifically patched or workarounds applied.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could steal administrator credentials, perform account takeovers, deface websites, or redirect users to malicious sites, potentially leading to complete system compromise.

🟠

Likely Case

Attackers inject malicious scripts that steal user session cookies or credentials when users view the compromised remote app title, leading to unauthorized access to user accounts.

🟢

If Mitigated

With proper input validation and output encoding, the injected scripts would be rendered harmless as plain text rather than executable code.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires the attacker to have access to create or modify remote app titles. The vulnerability is stored XSS, meaning the malicious payload persists until removed.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Liferay Portal 7.4.3.129+, Liferay DXP 2024.Q3.6+, 2024.Q2.13+, 2024.Q1.13+, update 93+

Vendor Advisory: https://liferay.dev/portal/security/known-vulnerabilities/-/asset_publisher/jekt/content/CVE-2025-43775

Restart Required: No

Instructions:

1. Download the appropriate patch from Liferay's customer portal. 2. Apply the patch according to Liferay's patching documentation. 3. Verify the patch was applied successfully by checking the version.

🔧 Temporary Workarounds

Input Validation Filter

all

Implement server-side input validation to sanitize remote app title fields before storage.

Implement custom validation hook in Liferay's RemoteAppEntry model to strip or encode HTML/script tags

Output Encoding

all

Ensure all remote app title outputs are properly HTML-encoded before rendering in web pages.

Modify JSP/FreeMarker templates to use Liferay's HtmlUtil.escape() or equivalent output encoding

🧯 If You Can't Patch

  • Restrict access to remote app creation/modification to trusted administrators only
  • Implement web application firewall (WAF) rules to block XSS payloads in remote app titles

🔍 How to Verify

Check if Vulnerable:

Check your Liferay version against affected versions. Test by attempting to inject a simple XSS payload like <script>alert('test')</script> into a remote app title field.

Check Version:

Navigate to Control Panel → Server Administration → Properties → System Properties and check liferay.version property

Verify Fix Applied:

After patching, attempt the same XSS injection test. The script should be displayed as plain text rather than executed. Check that the version matches patched versions.

📡 Detection & Monitoring

Log Indicators:

  • Unusual remote app creation/modification events
  • Log entries showing script tags or JavaScript in remote app title fields
  • Increased error logs from validation failures

Network Indicators:

  • HTTP requests containing script payloads in remote app title parameters
  • Unusual outbound connections from user browsers after viewing remote apps

SIEM Query:

source="liferay.log" AND ("RemoteAppEntry" OR "remote.app.title") AND ("<script>" OR "javascript:" OR "onerror=" OR "onload=")

🔗 References

📤 Share & Export