Miggo Logo

CVE-2025-43789: Liferay Portal JSON Web Services Direct Class Invocation Enables Service Access Policy Execution

N/A

CVSS Score

Basic Information

EPSS Score
0.04627%
Published
9/12/2025
Updated
9/15/2025
KEV Status
No
Technology
TechnologyJava

Technical Details

CVSS Vector
-
Package NameEcosystemVulnerable VersionsFirst Patched Version
com.liferay:com.liferay.comment.webmaven>= 6.0.2, < 6.1.46.1.4

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability, described as 'JSON Web Services Direct Class Invocation Enables Service Access Policy Execution', stems from a misconfiguration in how certain JSON web services were registered within Liferay Portal. Instead of being registered in a way that allowed Liferay's Aspect-Oriented Programming (AOP) framework to proxy them and apply security policies, the service classes were invoked directly. This effectively bypassed the intended Service Access Policy (SAP) checks, creating an authorization vulnerability.

The analysis of the provided patches confirms this root cause. The commits consistently modify the service implementation classes to ensure they are correctly intercepted by the AOP framework. Two primary patterns were observed in the patches:

  1. Introducing an Interface: For com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl, the fix involved creating a new interface (CommentManagerJSONWS) and having the implementation class implement it. The commit message LPD-4056 An interface is required to be able to proxy explicitly states that this change was necessary to enable proxying, which is the mechanism for applying AOP advices like security checks.

  2. Implementing AopService: For com.liferay.commerce.internal.country.CommerceCountryManagerImpl, the fix was to make the class implement the AopService interface and change its component registration. This directly hooks the class into the AOP system, ensuring its methods are intercepted as intended. The commit message LPD-4056 Ensure CommerceCountryManagerImpl is intercepted by advices confirms this.

Therefore, the vulnerable functions are the public methods within these service classes that were exposed via JSON-WS. During exploitation, a runtime profiler would show calls to these methods, which, prior to the patch, would have been executed without the proper authorization checks being performed by the AOP framework.

Vulnerable functions

com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl.addComment
modules/apps/comment/comment-web/src/main/java/com/liferay/comment/web/internal/jsonws/CommentManagerJSONWSImpl.java
This method was exposed via a JSON Web Service that was invoked directly as a concrete class rather than through an interface. This prevented Liferay's AOP-based Service Access Policies from being applied, leading to an authorization bypass. An attacker could potentially call this method without proper permission checks.
com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl.deleteComment
modules/apps/comment/comment-web/src/main/java/com/liferay/comment/web/internal/jsonws/CommentManagerJSONWSImpl.java
This method was exposed via a JSON Web Service that was invoked directly as a concrete class rather than through an interface. This prevented Liferay's AOP-based Service Access Policies from being applied, leading to an authorization bypass. An attacker could potentially call this method without proper permission checks.
com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl.getComments
modules/apps/comment/comment-web/src/main/java/com/liferay/comment/web/internal/jsonws/CommentManagerJSONWSImpl.java
This method was exposed via a JSON Web Service that was invoked directly as a concrete class rather than through an interface. This prevented Liferay's AOP-based Service Access Policies from being applied, leading to an authorization bypass. An attacker could potentially call this method without proper permission checks.
com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl.getCommentsCount
modules/apps/comment/comment-web/src/main/java/com/liferay/comment/web/internal/jsonws/CommentManagerJSONWSImpl.java
This method was exposed via a JSON Web Service that was invoked directly as a concrete class rather than through an interface. This prevented Liferay's AOP-based Service Access Policies from being applied, leading to an authorization bypass. An attacker could potentially call this method without proper permission checks.
com.liferay.comment.web.internal.jsonws.CommentManagerJSONWSImpl.updateComment
modules/apps/comment/comment-web/src/main/java/com/liferay/comment/web/internal/jsonws/CommentManagerJSONWSImpl.java
This method was exposed via a JSON Web Service that was invoked directly as a concrete class rather than through an interface. This prevented Liferay's AOP-based Service Access Policies from being applied, leading to an authorization bypass. An attacker could potentially call this method without proper permission checks.
com.liferay.commerce.internal.country.CommerceCountryManagerImpl.getBillingCountries
modules/apps/commerce/commerce-service/src/main/java/com/liferay/commerce/internal/country/CommerceCountryManagerImpl.java
This method, and likely others in its class, were exposed via a JSON Web Service that was not correctly configured to be intercepted by Liferay's AOP framework. This meant that security-related 'advices,' such as Service Access Policy checks, were not being executed, leading to an authorization bypass.

WAF Protection Rules

WAF Rule

JSON W** S*rvi**s in Li**r*y Port*l *.*.* t*rou** *.*.*.***, *n* Li**r*y *XP ****.Q*.* t*rou** ****.Q*.*, *.* ** t*rou** up**t* ** pu*lis*** to OS*i *r* r**ist*r** *n* invok** *ir**tly *s *l*ss*s w*i** *llows S*rvi** ****ss Poli*i*s to **t *x**ut**.

Reasoning

T** vuln*r**ility, **s*ri*** *s 'JSON W** S*rvi**s *ir**t *l*ss Invo**tion *n**l*s S*rvi** ****ss Poli*y *x**ution', st*ms *rom * mis*on*i*ur*tion in *ow **rt*in JSON w** s*rvi**s w*r* r**ist*r** wit*in Li**r*y Port*l. Inst*** o* **in* r**ist*r** in