When Trust Fails : Deconstructing CVE-2026-114820 and the eMudhra Java PKI Crisis
A deep dive into CVE-2026-114820: how a third-party CA compromise cracked the JVM's default chain of trust, and the exact steps engineering teams need to patch it.

📑 Table of Contents
- Executive Summary (TL;DR)
- 1. Vulnerability Profile & Metadata
- 2. Affected vs. Patched Versions
- 3. Technical Root Cause: Anatomy of a Trust Collapse
- 4. Exploitation Breakdown: Man-in-the-Middle (MitM)
- 5. Remediation & Immediate Workarounds
- 6. Engineering Action Checklist
- Join the Discussion
Executive Summary (TL;DR)
In 30 Seconds: CVE-2026-114820 is an emergency vulnerability rated CVSS 9.1 (Critical) impacting the Java Secure Socket Extension (JSSE) across multiple Oracle Java SE and GraalVM versions.
- The Root Cause: Private keys of several eMudhra intermediate Certificate Authorities (CAs) were compromised due to insufficient cryptographic entropy during key generation. Because the parent eMudhra Root CAs are trusted by default in Java's
cacertsstore, an attacker holding these keys can forge valid TLS/HTTPS certificates for arbitrary domains.- The Real-World Impact: Unauthenticated Man-in-the-Middle (MitM) attacks against outbound Java HTTPS/TLS connections, complete loss of data confidentiality and integrity, and potential forged signed JAR distribution.
- Action Required: Immediately upgrade runtimes to patched releases (e.g., JDK 17.0.22+, 21.0.14+) or execute manual removal of the four affected root aliases from your
$JAVA_HOME/lib/security/cacertskeystore.
1. Vulnerability Profile & Metadata
| Metric | Specification |
|---|---|
| CVE Identifier | CVE-2026-114820 (Related tracking: CVE-2026-91403) |
| CVSS v3.1 Score | 9.1 (Critical) |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Vulnerability Class | CWE-295 (Improper Certificate Validation) / CWE-327 (Use of Risky Cryptographic Algorithm) |
| Affected Component | Java Secure Socket Extension (JSSE) |
| Attack Vector | Network (Adjacent/Remote via on-path routing or spoofing) |
| Authentication / User Interaction | None required (PR:N, UI:N) |
2. Affected vs. Patched Versions
The issue impacts active Long-Term Support (LTS) releases, legacy deployments, and standard enterprise runtimes:
| Product Family | Vulnerable Versions | Patched Minimum Release |
|---|---|---|
| Oracle Java SE 8 | 8u511-b32, 8u511-perf-b32 (and earlier) |
8u512 or later |
| Oracle Java SE 11 | 11.0.33.0.2 (and earlier) |
11.0.34 or later |
| Oracle Java SE 17 (LTS) | 17.0.21.0.2 (and earlier) |
17.0.22 or later |
| Oracle Java SE 21 (LTS) | 21.0.13.0.2 (and earlier) |
21.0.14 or later |
| Oracle Java SE 25 / 27 | 25.0.5.0.2, 27.0.1.0.2 (and earlier) |
25.0.6 / 27.0.2 |
| Oracle GraalVM for JDK | 17.0.21.0.2, 21.0.13.0.2 |
Corresponding patched JDK baseline |
| GraalVM Enterprise Edition | 21.3.20.0.2 |
Latest maintenance update |
3. Technical Root Cause: Anatomy of a Trust Collapse
Unlike conventional memory corruption bugs (such as buffer overflows or out-of-bounds writes), CVE-2026-114820 represents a failure of Public Key Infrastructure (PKI) trust chains.
[Compromised eMudhra Sub-CA Private Key]
│
▼
[Forged *.target.com Leaf Cert]
│
│ (Network Interception / ARP Spoofing / DNS Hijack)
▼
[Java JSSE Client Engine]
│
├──► 1. Read System Trust Store ($JAVA_HOME/lib/security/cacerts)
│ └── Found Root: "emsignrootcag1" (Trusted)
│
├──► 2. Check Revocation?
│ └── Default: FALSE (No OCSP/CRL queries made)
│
▼
[RESULT: TLS Handshake Succeeds Silently]
Why the Flaw Exists
- Compromised Entropy: Intermediate CAs under eMudhra were generated using flawed random number generation, enabling threat actors to extract or reconstruct private keys.
- Implicit Trust Bundling: Oracle Java distributions ship with a pre-configured keystore located at
$JAVA_HOME/lib/security/cacerts, which included root certificates operated by eMudhra. - The Revocation Blind Spot: By default, standard Java JSSE implementations (including
HttpsURLConnection, SpringRestTemplate/WebClient, Apache HttpClient, and OkHttp) do not perform dynamic revocation checking (OCSP or CRL) unless explicitly instructed via JVM startup flags. - Validation Acceptance: Because the forged leaf certificate presents a cryptographically valid chain terminating at a trusted eMudhra root inside
cacerts, Java completes the TLS handshake without throwing anSSLHandshakeException.
4. Exploitation Breakdown: Man-in-the-Middle (MitM)
Because the CVSS vector specifies AV:N/AC:L/PR:N/UI:N, an attacker needs zero authentication and zero interaction from the victim once in an on-path position.
End-to-End Scenario: Payment Gateway Interception
Consider a production backend service executing an outbound API request to process customer payments:
// Standard outbound HTTPS call in a Java microservice
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.payments.com/v1/charge"))
.header("Authorization", "Bearer sk_live_secret_key_12345")
.POST(HttpRequest.BodyPublishers.ofString("{\"amount\": 5000}"))
.build();
// In vulnerable environments, JSSE validates against the compromised root
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
The Attack Steps
- Positioning: An adversary establishes network presence (via ARP poisoning on a shared cloud virtual network, compromised upstream router, or DNS cache poisoning).
- Dynamic Impersonation: When the Java service initiates the TLS handshake with
api.payments.com, the attacker intercepts the connection and serves an on-the-fly certificate forapi.payments.comsigned by the compromised eMudhra Sub-CA. - Handshake Completion: The Java JSSE engine validates the chain against
emsignrootcag1incacerts. Finding the certificate chain mathematically sound, it negotiates TLS session keys directly with the attacker. - Data Exfiltration and Tampering: The attacker decrypts authorization bearer tokens and payment details in real time, alters the destination account number, and relays the request to the authentic endpoint.
5. Remediation & Immediate Workarounds
Option 1: Official Patch (Recommended & Definitive)
Upgrade all JDK and GraalVM installations to the patched builds listed above. The official patches remove the affected root certificates from the internal cacerts keystore.
Option 2: Emergency Keystore Purge (Workaround)
If deployment freeze schedules prevent an immediate JVM upgrade, manually remove the four affected root aliases from the local cacerts file using the Java keytool utility (default password: changeit).
# Define your runtime keystore path
CACERTS_PATH="$JAVA_HOME/lib/security/cacerts"
# Remove the four compromised eMudhra / related root aliases
keytool -delete -alias emsignrootcag1 -keystore "$CACERTS_PATH" -storepass changeit
keytool -delete -alias emsignrootcag2 -keystore "$CACERTS_PATH" -storepass changeit
keytool -delete -alias emsigneccrootcag3 -keystore "$CACERTS_PATH" -storepass changeit
keytool -delete -alias comodoaaaca -keystore "$CACERTS_PATH" -storepass changeit
# Verify removal (output should be empty)
keytool -list -keystore "$CACERTS_PATH" -storepass changeit | grep -E "emsign|comodoaaaca"
Option 3: Enforce Strict Revocation Checks at Runtime
Force the JVM to dynamically validate CRLs and query OCSP responders before establishing any outbound TLS session by supplying JVM startup flags:
java -Dcom.sun.security.enableCRLDP=true \
-Dcom.sun.net.ssl.checkRevocation=true \
-jar backend-service.jar
⚠️ Operational Note: Enabling strict revocation checking incurs minor latency during cold-start TLS handshakes and requires your application containers to have egress network connectivity to public CA revocation endpoints.
6. Engineering Action Checklist
- Audit Base Images: Update all container base images (
eclipse-temurin,amazoncorretto,openjdk,distroless) to their latest patch versions. - Inspect In-Flight Truststores: Review custom keystores created across your services to verify whether they were originally duplicated from unpatched
cacertsfiles. - Review Code Signing Procedures: If your organization relies on signed JAR verification, run
jarsigner -verify -revcheck -strict <artifact.jar>to enforce strict revocation on distribution artifacts.
Join the Discussion
How is your infrastructure team handling PKI trust-store rotation and runtime certificate revocation? Drop your thoughts or questions, feel free to contact me.