CVE-2026-33439
Pre-Authentication Remote Code Execution via `jato.clientSession` Deserialization in OpenAM
Open Access Management (OpenAM) is an access management solution. Prior to 16.0.6, OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464. An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains jato:form tags (e.g., the Password Reset pages). This vulnerability is fixed in 16.0.6.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.3
Pre-Authentication Remote Code Execution via `jato.clientSession` Deserialization in OpenAM
Open Access Management (OpenAM) is an access management solution. Prior to 16.0.6, OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464. An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains jato:form tags (e.g., the Password Reset pages). This vulnerability is fixed in 16.0.6.
- Record
CVE-2026-33439- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
EUVDEUVD-2026-19941
9.3
Open Access Management (OpenAM) is an access management solution. Prior to 16.0.6, OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464. An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains jato:form tags (e.g., the Password Reset pages). This vulnerability is fixed in 16.0.6.
- Record
EUVD-2026-19941- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-2cqq-rpvq-g5qj
9.3
OpenIdentityPlatform OpenAM: Pre-Authentication Remote Code Execution via `jato.clientSession` Deserialization in OpenAM
Summary
OpenIdentityPlatform OpenAM 16.0.5 (and likely earlier versions) is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464.
An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains <jato:form> tags (e.g., the Password Reset pages).
Vulnerability Details
Background
CVE-2021-35464 identified that the jato.pageSession HTTP parameter was deserialized without class filtering, allowing pre-auth RCE.
OpenIdentityPlatform OpenAM mitigated this by introducing WhitelistObjectInputStream in ConsoleViewBeanBase.deserializePageAttributes(), which restricts jato.pageSession deserialization to a hardcoded whitelist of ~40 safe classes.
However, the JATO framework contains a second deserialization entry point — jato.clientSession — handled by ClientSession.deserializeAttributes(). This code path was not patched and still uses the unfiltered Encoder.deserialize() → ApplicationObjectInputStream, which performs ObjectInputStream.readObject() with no class whitelist.
Root Cause
ClientSession.deserializeAttributes()
→ Encoder.deserialize()
→ ApplicationObjectInputStream.readObject() // VULNERABLE — no whitelist
The ClientSession object is instantiated in RequestContextImpl.getClientSession() with the raw jato.clientSession parameter value from the HTTP request. Deserialization is triggered during JSP rendering when <jato:form> tags invoke getClientSession() → hasAttributes() → getEncodedString() → isValid() → ensureAttributes() → deserializeAttributes().
Affected Code
File: com/iplanet/jato/ClientSession.java
protected ClientSession(RequestContext context) {
this.encodedSessionString =
context.getRequest().getParameter("jato.clientSession");
}
protected void deserializeAttributes() {
if (this.encodedSessionString != null
&& this.encodedSessionString.trim().length() > 0) {
this.setAttributes(
(Map) Encoder.deserialize(
Encoder.decodeHttp64(this.encodedSessionString), false)
);
}
}
Gadget Chain
The exploit uses classes bundled in the OpenAM WAR:
PriorityQueue.readObject() [java.util — JDK]
→ heapify() → siftDown() → comparator.compare()
→ Column$ColumnComparator.compare() [openam-core-16.0.5.jar]
→ Column.getProperty()
→ PropertyUtils.getObjectPropertyValue() [openam-core-16.0.5.jar]
→ Method.invoke(TemplatesImpl, "getOutputProperties")
→ TemplatesImpl.getOutputProperties() [xalan-2.7.3.jar]
→ newTransformer() → defineTransletClasses()
→ TransletClassLoader.defineClass(_bytecodes)
→ _class[_transletIndex].newInstance()
→ EvilTranslet.<clinit>() [attacker bytecode]
→ Runtime.getRuntime().exec(cmd)
Impact
- Pre-authentication — no credentials or session tokens required
- Remote Code Execution — arbitrary OS commands as the application server user
- Full server compromise, lateral movement, data exfiltration
- Affects any deployment with at least one accessible JATO endpoint whose JSP renders
<jato:form>tags (e.g., Password Reset pages)
Tested Environment
- OpenIdentityPlatform OpenAM 16.0.5 (official release WAR from GitHub)
- Apache Tomcat 10.1.52
- Java 21.0.7 (Oracle JDK)
- macOS / Linux (aarch64)
- Also verified on
openidentityplatform/openam:latestDocker image (Java 25)
Affected Versions
-…
- Record
GHSA-2cqq-rpvq-g5qj- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
NVD
9.3
Open Access Management (OpenAM) is an access management solution. Prior to 16.0.6, OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464. An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains jato:form tags (e.g., the Password Reset pages). This vulnerability is fixed in 16.0.6.
- Record
CVE-2026-33439- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-502
- Updated
- 2026-11-02
OSV
9.3
Pre-Authentication Remote Code Execution via `jato.clientSession` Deserialization in OpenAM
Open Access Management (OpenAM) is an access management solution. Prior to 16.0.6, OpenIdentityPlatform OpenAM is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464. An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains jato:form tags (e.g., the Password Reset pages). This vulnerability is fixed in 16.0.6.
- Record
CVE-2026-33439- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
OSVGHSA-2cqq-rpvq-g5qj
9.3
OpenIdentityPlatform OpenAM: Pre-Authentication Remote Code Execution via `jato.clientSession` Deserialization in OpenAM
Summary
OpenIdentityPlatform OpenAM 16.0.5 (and likely earlier versions) is vulnerable to pre-authentication Remote Code Execution (RCE) via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypasses the WhitelistObjectInputStream mitigation that was applied to the jato.pageSession parameter after CVE-2021-35464.
An unauthenticated attacker can achieve arbitrary command execution on the server by sending a crafted serialized Java object as the jato.clientSession GET/POST parameter to any JATO ViewBean endpoint whose JSP contains <jato:form> tags (e.g., the Password Reset pages).
Vulnerability Details
Background
CVE-2021-35464 identified that the jato.pageSession HTTP parameter was deserialized without class filtering, allowing pre-auth RCE.
OpenIdentityPlatform OpenAM mitigated this by introducing WhitelistObjectInputStream in ConsoleViewBeanBase.deserializePageAttributes(), which restricts jato.pageSession deserialization to a hardcoded whitelist of ~40 safe classes.
However, the JATO framework contains a second deserialization entry point — jato.clientSession — handled by ClientSession.deserializeAttributes(). This code path was not patched and still uses the unfiltered Encoder.deserialize() → ApplicationObjectInputStream, which performs ObjectInputStream.readObject() with no class whitelist.
Root Cause
ClientSession.deserializeAttributes()
→ Encoder.deserialize()
→ ApplicationObjectInputStream.readObject() // VULNERABLE — no whitelist
The ClientSession object is instantiated in RequestContextImpl.getClientSession() with the raw jato.clientSession parameter value from the HTTP request. Deserialization is triggered during JSP rendering when <jato:form> tags invoke getClientSession() → hasAttributes() → getEncodedString() → isValid() → ensureAttributes() → deserializeAttributes().
Affected Code
File: com/iplanet/jato/ClientSession.java
protected ClientSession(RequestContext context) {
this.encodedSessionString =
context.getRequest().getParameter("jato.clientSession");
}
protected void deserializeAttributes() {
if (this.encodedSessionString != null
&& this.encodedSessionString.trim().length() > 0) {
this.setAttributes(
(Map) Encoder.deserialize(
Encoder.decodeHttp64(this.encodedSessionString), false)
);
}
}
Gadget Chain
The exploit uses classes bundled in the OpenAM WAR:
PriorityQueue.readObject() [java.util — JDK]
→ heapify() → siftDown() → comparator.compare()
→ Column$ColumnComparator.compare() [openam-core-16.0.5.jar]
→ Column.getProperty()
→ PropertyUtils.getObjectPropertyValue() [openam-core-16.0.5.jar]
→ Method.invoke(TemplatesImpl, "getOutputProperties")
→ TemplatesImpl.getOutputProperties() [xalan-2.7.3.jar]
→ newTransformer() → defineTransletClasses()
→ TransletClassLoader.defineClass(_bytecodes)
→ _class[_transletIndex].newInstance()
→ EvilTranslet.<clinit>() [attacker bytecode]
→ Runtime.getRuntime().exec(cmd)
Impact
- Pre-authentication — no credentials or session tokens required
- Remote Code Execution — arbitrary OS commands as the application server user
- Full server compromise, lateral movement, data exfiltration
- Affects any deployment with at least one accessible JATO endpoint whose JSP renders
<jato:form>tags (e.g., Password Reset pages)
Tested Environment
- OpenIdentityPlatform OpenAM 16.0.5 (official release WAR from GitHub)
- Apache Tomcat 10.1.52
- Java 21.0.7 (Oracle JDK)
- macOS / Linux (aarch64)
- Also verified on
openidentityplatform/openam:latestDocker image (Java 25)
Affected Versions
-…
- Record
GHSA-2cqq-rpvq-g5qj- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
org.openidentityplatform.openam:openamMaven |
through 16.0.5 | 16.0.6 |
org.openidentityplatform.openam:openamMaven |
before 16.0.6, plus listed versions 14.5.214.5.314.5.414.6.114.6.2 Show 33 moreShow less14.6.314.6.414.6.514.6.614.7.014.7.114.7.214.7.314.7.414.8.114.8.214.8.314.8.415.0.015.0.115.0.215.0.315.0.415.1.015.1.115.1.215.1.315.1.415.1.515.1.615.2.015.2.115.2.216.0.116.0.216.0.316.0.416.0.5 |
16.0.6 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | shreyas-malhotra/CVE-2026-33439-OpenAM | 2026-04-27 |
| PoC in GitHub | Ibonok/CVE-2026-33439-PoC | 2026-04-28 |
| PoC in GitHub | TheMalwareGuardian/CVE-2026-33439 | 2026-04-30 |
| PoC in GitHub | infernosalex/CVE-2026-33439-Python-PoC | 2026-09-12 |
| PoC in GitHub | JonasChen0103/CVE-2026-33439-PoC | 2026-09-19 |
| PoC in GitHub | rh33t/CVE-2026-33439-Poc | 2026-09-20 |
| PoC in GitHub | amis13/openam-clean | 2026-10-07 |
| PoC in GitHub | TeoVMP/CVE-2026-33439 | 2026-10-29 |
| PoC in GitHub | stapat1245/CVE-2026-33439_poc | 2026-11-02 |
| PoC in GitHub | duohnson/CVE-2026-33439-PoC | 2026-11-06 |
| Nuclei | OpenAM <= 16.0.5 - Pre-Auth RCE via jato.clientSession Deserialization |
History
| Recorded | Changed | Sources |
|---|---|---|
| exploits | PoC in GitHub | |
| exploits, facts | PoC in GitHub | |
| first indexed | CVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-33439 is a critical vulnerability (CVSS 9.3) in Openidentityplatform Openam, published April 7, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 9.33%, the 95th percentile. Fixed in org.openidentityplatform.openam:openam 16.0.6.
References
github.com/OpenIdentityPlatform/OpenAM/security/advisories/GHSA-2cqq-rpvq-g5qj
github.com/OpenIdentityPlatform/OpenAM/commit/014007c63cacc834cc795a89fac0e611aebc4a32
github.com/OpenIdentityPlatform/OpenAM/releases/tag/16.0.6
nvd.nist.gov/vuln/detail/CVE-2026-33439
github.com/advisories/GHSA-2cqq-rpvq-g5qj
github.com/CVEProject/cvelistV5/tree/main/cves/2026/33xxx/CVE-2026-33439.json
github.com/OpenIdentityPlatform/OpenAM
Left out here: the rest of 2 source descriptions. The JSON record has them.