Skip to main content

Java EUVDEUVD-2026-19941

| CVE-2026-33439 CRITICAL
Deserialization of Untrusted Data (CWE-502)
2026-04-07 https://github.com/OpenIdentityPlatform/OpenAM GHSA-2cqq-rpvq-g5qj
9.3
CVSS 4.0 · Vendor: https://github.com/OpenIdentityPlatform/OpenAM
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send crafted serialized Java object in jato.clientSession parameter
  2. Exploit
    Bypass WhitelistObjectInputStream mitigation
  3. Execution
    Trigger unsafe deserialization
  4. Impact
    Execute arbitrary code on server

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

OpenIdentityPlatform OpenAM 16.0.5 or earlier with JATO ViewBean endpoints containing <jato:form> tags. No authentication required. Exploitable against default configurations via HTTP GET/POST to any vulnerable JATO endpoint.

Impact

This represents a critical real-world risk despite the absence of CVSS scoring. The attack vector is network-based with low complexity, requiring no authentication or user interaction - attackers need only identify accessible JATO endpoints with form tags (common in OpenAM password reset and login workflows). The published advisory contains comprehensive technical details including exact gadget chain implementation, tested environments (Tomcat 10.1.52, Java 21/25, Docker containers), and root cause analysis, significantly lowering the barrier for exploit development. Although no public exploit code is confirmed at time of analysis and the vulnerability is not in CISA KEV, the detailed technical disclosure combined with pre-authentication remote code execution impact makes this a high-priority patching candidate. The availability of a vendor patch (version 16.0.6, commit 014007c) since the advisory publication provides clear remediation path. Organizations running OpenAM in internet-facing identity management roles face immediate risk of full server compromise, lateral movement, and credential harvesting if unpatched. The 90-day disclosure deadline mentioned in the report creates urgency for patching before proof-of-concept code becomes widely available.

Exploit ScenarioDerived

An unauthenticated remote attacker discovers an OpenAM installation's password reset page and identifies the jato.clientSession parameter in HTTP requests. The attacker crafts a malicious Java serialized object using the PriorityQueue→Column$ColumnComparator→TemplatesImpl gadget chain, embedding bytecode that executes reverse shell commands. This payload is Base64-encoded per JATO's encoding scheme and submitted as the jato.clientSession GET or POST parameter to the password reset endpoint. When the JSP page renders the <jato:form> tag, OpenAM's JATO framework automatically deserializes the attacker's payload through ClientSession.deserializeAttributes() without class filtering, triggering the gadget chain. The TemplatesImpl class loader instantiates the attacker's malicious bytecode, executing arbitrary commands with the privileges of the application server user (typically tomcat or openam service account). The attacker gains full control of the OpenAM server, accesses credential stores, session tokens, and LDAP integration credentials, then pivots to connected enterprise

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Apr 07, 2026

Remote code execution in OpenIdentityPlatform OpenAM 16.0.5 and earlier allows unauthenticated attackers to execute arbitrary OS commands via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypass exploits an unpatched deserialization sink in JATO's ClientSession.deserializeAttributes() that was overlooked when CVE-2021-35464 was mitigated. Attackers can target any JATO ViewBean endpoint with <jato:form> tags (commonly found in password reset pages) using a PriorityQue

Earlier versions of this analysis (1)
v1 Apr 07, 2026 - 16:00 CVSS 9.3

Remote code execution in OpenIdentityPlatform OpenAM 16.0.5 and earlier allows unauthenticated attackers to execute arbitrary OS commands via unsafe Java deserialization of the jato.clientSession HTTP parameter. This bypass exploits an unpatched deserialization sink in JATO's ClientSession.deserializeAttributes() that was overlooked when CVE-2021-35464 was mitigated. Attackers can target any JATO ViewBean endpoint with <jato:form> tags (commonly found in password reset pages) using a PriorityQueue→TemplatesImpl gadget chain with libraries bundled in OpenAM's WAR file. Vendor-released patch available in version 16.0.6 (GitHub commit 014007c). No public exploit code identified at time of analysis, but detailed technical writeup with gadget chain specifics has been published.

RemediationAI

Upgrade immediately to OpenIdentityPlatform OpenAM version 16.0.6 or later, which includes the fix in commit 014007c63cacc834cc795a89fac0e611aebc4a32 available at https://github.com/OpenIdentityPlatform/OpenAM/commit/014007c63cacc834cc795a89fac0e611aebc4a32. The patch applies WhitelistObjectInputStream filtering to ClientSession.deserializeAttributes(), matching the mitigation implemented for CVE-2021-35464. Release notes and binaries are available at https://github.com/OpenIdentityPlatform/OpenAM/releases/tag/16.0.6. For environments unable to immediately upgrade, implement defense-in-depth measures including JVM-wide deserialization filtering using JEP 290 (Java Serialization Filtering), network segmentation to restrict access to OpenAM administrative endpoints, and monitoring for suspicious jato.clientSession parameter values in HTTP logs. Organizations should audit all custom JATO framework deployments for similar unpatched deserialization sinks and verify that WAF rules do not inadvertently allow Base64-encoded serialized objects in HTTP parameters.

Affected VersionsENISA

OpenAM < 16.0.6

Affected Packages

maven org.openidentityplatform.openam:openam fix: 16.0.6
euvd openam fix: 16.0.6

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in maven, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

This vulnerability exploits Java deserialization in the JATO web application framework used by OpenAM's administrative console. The root cause is CWE-502 (Deserialization of Untrusted Data) in the ClientSession class, which processes the jato.clientSession HTTP parameter through Encoder.deserialize() → ApplicationObjectInputStream.readObject() without class filtering. While OpenAM patched the jato.pageSession parameter after CVE-2021-35464 by introducing WhitelistObjectInputStream in ConsoleViewBeanBase.deserializePageAttributes(), the parallel code path in ClientSession.deserializeAttributes() remained vulnerable. The exploit leverages a PriorityQueue-based gadget chain using classes from openam-core-16.0.5.jar and xalan-2.7.3.jar (bundled dependencies), terminating in TemplatesImpl bytecode injection to achieve arbitrary code execution. The vulnerability is triggered during JSP rendering when <jato:form> tags invoke the ClientSession initialization sequence. Affected product per CPE: pkg:maven/org.openidentityplatform.openam:openam version 16.0.5 and likely all earlier versions that inherited the unpatched JATO framework code.

Know when Java gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/OpenIdentityPlatform/OpenAM) PRIMARY 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

Primary rating from Vendor (https://github.com/OpenIdentityPlatform/OpenAM) · only source for this CVE.

CVSS VectorVendor: https://github.com/OpenIdentityPlatform/OpenAM

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch released
Apr 07, 2026 - 16:00 nvd
Patch available
CVE Published
Apr 07, 2026 - 15:45 nvd
CRITICAL 9.3

DescriptionCVE.org

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

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:latest Docker image (Java 25)

Affected Versions

  • OpenIdentityPlatform OpenAM 16.0.5 (confirmed on both Docker and bare-metal Tomcat)
  • Likely all versions that left ClientSession.deserializeAttributes() unpatched

---

Remediation

  1. Apply WhitelistObjectInputStream filtering to ClientSession.deserializeAttributes(), matching the mitigation already applied to ConsoleViewBeanBase.deserializePageAttributes()
  2. Audit all callers of Encoder.deserialize() for user-controlled input
  3. Consider adding a JVM-wide JEP 290 deserialization filter as defense-in-depth

---

References

  • CVE-2021-35464 - Pre-auth RCE in ForgeRock OpenAM (PortSwigger Research)
  • https://portswigger.net/research/pre-auth-rce-in-forgerock-openam-cve-2021-35464
  • CWE-502: Deserialization of Untrusted Data

---

Credit

This finding was discovered by Rahul Maini and Hacktron AI while auditing OpenIdentityPlatform OpenAM. Hacktron AI is our white-box pentest solution, designed to deliver high-accuracy results with minimal false positives.

---

Disclosure Policy

This bug is subject to a 90-day disclosure deadline. If a fix for this issue is made available to users before the end of the 90-day deadline, this bug report will become public on the day that the fix was made available or an earlier or later date if agreed by both parties. Otherwise, this bug report will become public at the deadline.

If another researcher discloses the proof-of-concept before any deadlines, we reserve the right to publish our findings.

The details of this bug may be privately disclosed to vulnerable parties, including but not limited to Hacktron AI's customers.

Executive ViewAI

Why It Matters

OpenIdentityPlatform OpenAM versions 16.0.5 and earlier contain a critical remote code execution vulnerability in the JATO framework that allows unauthenticated attackers to execute arbitrary commands on affected systems. This represents a complete bypass of previous CVE-2021-35464 mitigations and directly threatens any organization using OpenAM for identity management, potentially compromising user credentials, authentication infrastructure, and downstream applications.

Business Impact: Severe
Compensating Controls

Apply vendor patch. Until patching is complete: implement Web Application Firewall rules to block requests containing 'jato.clientSession' parameters; restrict network access to OpenAM endpoints to known legitimate sources only; increase monitoring of authentication-related endpoints for serialized object indicators; consider temporary disable of password reset functionality if feasible.

Threat Intelligence Overview

EPSS Score
0.1%
Top 72% exploitable
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

66
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy