OpenAM Pre-Authentication RCE via JATO ClientSession Deserialization
OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the `jato.clientSession` HTTP parameter, allowing unauthenticated attackers to execute arbitrary commands on the server.
CVE search metadata
CVE search record: CVE-2026-33439. Severity: critical. CVSS: 9.8. EPSS: 9.33%. KEV: no. Product: Openam. Brief: OpenAM Pre-Authentication RCE via JATO ClientSession Deserialization. Brief link: https://feed.craftedsignal.io/briefs/2024-01-openam-rce/
CVE search record: CVE-2021-35464. KEV: no. Product: Openam. Brief: OpenAM Pre-Authentication RCE via JATO ClientSession Deserialization. Brief link: https://feed.craftedsignal.io/briefs/2024-01-openam-rce/
Triage facts
Revision 1- Evidence
- Unknown
- Severity
- Critical
- Sources
- 3 public sources
- Freshness
- Revision 1Jan 3, 12:00 UTC
- Detection
- 2 rules
- Vulnerabilities
- 2 CVEs
What's new
- 1. poc_available; added CVE-2026-33439 Oct 28, 06:46 via sploitus
OpenIdentityPlatform OpenAM 16.0.5, and likely earlier versions, is susceptible to a critical pre-authentication Remote Code Execution (RCE) vulnerability. This flaw stems from the unsafe Java deserialization of the jato.clientSession HTTP parameter. Unlike the patched jato.pageSession parameter (CVE-2021-35464), jato.clientSession lacks proper input validation, allowing an unauthenticated attacker to inject a malicious serialized Java object. Successful exploitation grants the attacker the ability to execute arbitrary operating system commands with the privileges of the application server user. The vulnerability affects any OpenAM deployment that exposes a JATO endpoint with <jato:form> tags in its JSP pages, such as those used for password resets, making it a widespread threat to OpenAM installations.
Attack Chain
- The attacker identifies an OpenAM endpoint that uses JATO ViewBeans and contains
<jato:form>tags in its JSP (e.g., the password reset page). - The attacker crafts a malicious serialized Java object designed to execute arbitrary commands. This payload leverages the
PriorityQueue,Column$ColumnComparator,PropertyUtils,TemplatesImpl, andEvilTransletclasses bundled within the OpenAM WAR file. - The attacker encodes the malicious serialized object using HTTP Base64 encoding.
- The attacker sends an HTTP GET or POST request to the vulnerable endpoint, including the Base64-encoded payload as the value of the
jato.clientSessionparameter. - The OpenAM server receives the request and passes the
jato.clientSessionparameter toRequestContextImpl.getClientSession(). - During JSP rendering, the
<jato:form>tag invokesgetClientSession(), which in turn callshasAttributes(),getEncodedString(),isValid(), and finallyensureAttributes(), triggeringdeserializeAttributes(). - The
deserializeAttributes()method inClientSession.javadeserializes thejato.clientSessionparameter usingEncoder.deserialize()andApplicationObjectInputStream.readObject()without proper input validation. - The malicious serialized object is deserialized, leading to the execution of the injected
EvilTransletbytecode and the execution of arbitrary OS commands.
Impact
The pre-authentication nature of this RCE vulnerability allows attackers to compromise OpenAM servers without requiring valid credentials or session tokens. A successful exploit can lead to full server compromise, enabling lateral movement within the network, data exfiltration, and other malicious activities. The vulnerability affects any OpenAM deployment with at least one accessible JATO endpoint whose JSP renders <jato:form> tags. OpenAM 16.0.5 is confirmed to be vulnerable and earlier versions are likely affected.
Recommendation
- Apply
WhitelistObjectInputStreamfiltering toClientSession.deserializeAttributes()incom/iplanet/jato/ClientSession.java, mirroring the mitigation already in place forConsoleViewBeanBase.deserializePageAttributes(). - Deploy the Sigma rule "Detect OpenAM JATO ClientSession Deserialization Attempt" to monitor for exploitation attempts targeting the
jato.clientSessionparameter. - Audit all callers of
Encoder.deserialize()for user-controlled input to identify and mitigate other potential deserialization vulnerabilities. - As a defense-in-depth measure, consider implementing a JVM-wide JEP 290 deserialization filter to restrict deserialization to trusted classes.
Detection coverage 2
Detect OpenAM JATO ClientSession Deserialization Attempt
criticalDetects attempts to exploit the OpenAM JATO clientSession deserialization vulnerability by monitoring for requests with a large base64 encoded string in the 'jato.clientSession' parameter.
Detect OpenAM POST Request with JATO ClientSession Parameter
mediumDetects suspicious POST requests to OpenAM with the 'jato.clientSession' parameter, potentially indicating a deserialization attack.
Detection queries are available on the platform. Get full rules →