Oracle Java drops four root certificates over eMudhra: patch, then test what breaks
CVE-2026-114820 is Oracle's second emergency Java alert in four days. The October 24 builds remove eMudhra's three emSign roots and Comodo's AAA root from cacerts. Here's who is exposed, what can break, and the order to roll it out.
part 8 of 25 · Platform releases, explained from scratchthe ideaWeak eMudhra keys let anyone forge a cert. Java's Oct 21 and 24 builds stop it.
after reading, you can- Read a Java version string and tell whether that runtime still trusts the eMudhra and AAA roots
- Spot the connections the root removal could break before you roll the update into production
- Find the runtimes a host patch misses: container images, native images, bundled JREs and custom truststores
Oracle has put out a second emergency Java update in four days over the eMudhra certificate keys. The October 24 builds take four root certificates out of Java's trust store, so update Java this week and test every outside HTTPS connection before you roll it out.
Older Java trusted website certificates anyone could fake. The fix may also break a few real ones.
When a Java program calls another system over HTTPS, it checks the other side's certificate against a built-in list of trusted issuers. Last week researchers showed that eight issuing certificates run by eMudhra, an Indian certificate authority, had private keys anyone could work out. With those keys, someone could make a certificate for any website, and Java builds from before October 21 would accept it. Chrome and Firefox blocked them within hours. Java keeps its own list, so it needed its own fix. Oracle's October 21 update blocked the bad certificates, and the October 24 update goes further and removes the roots above them. That second step can stop some legitimate connections working too.
A building's front desk keeps a list of companies whose badges it accepts. One badge maker, it turns out, used a process anyone could copy, so fake badges were easy to make. Security first refused that maker's badges. Now it has crossed two companies off the list entirely. Forgers get turned away, and so do a few honest visitors who happen to work there.
- Teams with Java services calling HTTPS APIs
- Owners of EBS, PeopleSoft or WebLogic estates
- Developers shipping containers with a JDK inside
- Anyone verifying signed JAR files
- Sites using eMudhra certificates
Why it matters to you
With a forged certificate, someone can sit in the middle of a connection and neither end notices. Your Java service thinks it's talking to the bank, the payroll provider or the identity server, so it hands over data and tokens. Oracle's 9.1 score for CVE-2026-114820 reflects that the attacker doesn't need a login or anyone's help. They do need to get onto the network path first, through a hostile Wi-Fi network, a poisoned DNS answer or a compromised proxy.
Nobody has reported an attack using these keys yet. Google says no website certificate chaining to the six TLS intermediates was logged to Certificate TransparencydefinitionPublic logs of issued certificates. Browsers require them, so a hidden forged certificate stands out. Java doesn't check these logs. before Chrome blocked them. India's CERT-In said on October 21 that the public disclosures don't establish confirmed malicious use. eMudhra says only one of the eight intermediates was ever used in production, and none had issued any end-entity certificate.
That's good news for browsers and weak comfort for Java. Certificate Transparency only catches certificates someone chose to log, and Java doesn't check the logs at all. The keys are also trivial to get now: Scott Helme reports recovering all eight from the public certificates in under a second, and researchers have published them. Anyone who wants to forge a certificate can, so the only thing protecting a Java build from before October 21 is that nobody has sat in the middle of its traffic yet.
-
01 The keys are public
eMudhra generated eight intermediate keys with too little randomness. Anyone can now calculate them from the public certificates.
-
02 Someone makes a certificate
With one of those keys, an attacker signs a certificate for any name they like, your bank's API or your identity provider.
-
03 They get in the middle
They need a spot on the network path: a hostile Wi-Fi, a tampered DNS answer, a compromised proxy or router.
-
04 Java accepts it
A Java build from before October 21 has no block on those intermediates and trusts the roots above them, so the handshake succeeds. Java doesn't check revocation by default.
-
05 Data and tokens leak
The service hands over passwords, tokens and records without a second thought. The attacker passes the traffic on to the real server, so nothing breaks and nobody looks.
For engineers: the eight intermediates are six TLS issuers (DV, OV and EV, each in G3B and G3C versions) and two code-signing issuers, and each one also exists as a copy cross-signeddefinitionA copy of an intermediate signed by a second root, so it's trusted by clients that only know that second root. Sectigo cross-signed the eMudhra intermediates under AAA Certificate Services. by Sectigo. The eMudhra copies chain to emSign ECC Root CA - G3. The cross-signed copies chain to AAA Certificate Services, an old Comodo root that Sectigo now owns. That second path is why removing the emSign root alone was never enough. A JVM that deleted only the emsigneccrootcag3 alias still trusted the six cross-signed TLS chains through comodoaaaca, a trap the Java developer Guillaume Laforge spelled out on October 21.
What Oracle fixed, in two steps
Oracle handled this in two Security Alerts. The first, CVE-2026-91403 on October 21, added the 16 bad certificates to Java's block list file, blocked.certsdefinitionA file in the JDK's lib/security folder listing certificates Java must never trust, even inside a chain to a trusted root. Java 8 calls it blacklisted.certs.. Oracle's release note says a TLS session won't be set up if the server's chain contains one of them, and a signed JAR fails jarsigner -verify -strict if it was signed through one. We covered that alert alongside the October Critical Patch Update.
The second, CVE-2026-114820 on October 24, takes the roots out as well. Oracle doesn't say in the alert why the block list wasn't enough. The practical effect is that nothing issued under these four roots is trusted any more, whatever it is, so the update closes the door on the compromised keys and also on every legitimate certificate from those hierarchies.
What the two Java alerts changed
The root above the eight compromised intermediates. Mozilla removed it on October 20, and Chrome expects its removal to reach devices on October 27.
eMudhra's RSA roots. Java goes further than Mozilla here: Mozilla said on October 20 it was keeping G1 for now, and eMudhra is still serving customers from it.
The old Comodo root, owned by Sectigo, that the cross-signed copies chain to. Other legacy chains ending there will fail too.
Since the October 21 builds: the eight eMudhra intermediates and their eight Sectigo cross-signs, in lib/security/blocked.certs.
jarsigner -verify -strict fails for a JAR signed through one of the blocked certificates. Two of the eight were code-signing issuers.
Also affected. Oracle puts the fixed GraalVM versions in its Patch Availability Document, which needs a My Oracle Support login.
| Product line | Still affected (Oct 21 build) | Fixed build (Oct 24) |
|---|---|---|
| Oracle Java SE 8 | 8u511-b32 and 8u511-perf-b32 | 8u511-b33 (and perf b33) |
| Oracle Java SE 11 | 11.0.33.0.2 | 11.0.33.0.3 |
| Oracle Java SE 17 | 17.0.21.0.2 | 17.0.21.0.3 |
| Oracle Java SE 21 | 21.0.13.0.2 | 21.0.13.0.3 |
| Oracle Java SE 25 | 25.0.5.0.2 | 25.0.5.0.3 |
| Oracle Java SE 27 | 27.0.1.0.2 | 27.0.1.0.3 |
| GraalVM for JDK 17 and 21 | 17.0.21.0.2 and 21.0.13.0.2 | In the Patch Availability Document (login) |
| GraalVM Enterprise 21.3 | 21.3.20.0.2 | In the Patch Availability Document (login) |
The table lists only the newest affected builds, because those are the ones Oracle names. Oracle only tests versions under Premier or Extended Support, and it says earlier releases are likely affected as well. If you're still on a Java line Oracle no longer supports, this is one more reason to move.
How it unfolded
- Apr 30, 2025eMudhra's key ceremony creates weak keys
eMudhra's own account: a flaw produced a second, weak set of keys, and that set went to the root stores.
- Oct 17, 2026Researcher reports it; Chrome blocks
- Oct 20, 2026Mozilla removes the G3 root; Go patches
- Oct 21, 2026CVE-2026-91403: Java blocks 16 certificates
- Oct 22, 2026eMudhra says it will leave the global TLS business
- Oct 24, 2026CVE-2026-114820: Java removes four roots
- Oct 27, 2026Chrome expects the G3 root removal to reach devices
- Nov 17, 2026Next Oracle patch update
Oracle says to move off the October 24 builds by then, so plan for another update.
What to do now
What to do now, by who you are
- Ask IT or your provider which systems run Java, and whether they're on the October 24 build or have a date for it.
- Ask whether any of your own websites or APIs use an eMudhra certificate. Chrome expects to stop trusting the G3 root on October 27.
- Ask your main vendors and partners whether their Java-based products need this update. Most enterprise software has Java inside somewhere.
- Make a list of every Java runtime you have, with its version and build. Vendor products and monitoring agents usually bring their own.
- Install the October 24 build on a test system first and run the integration tests that call outside HTTPS services.
- Then roll it out. For a JDK you can't update yet, Oracle's interim advice from the first alert was a replaced blocked.certs file or revocation checking. Neither removes the roots.
- On Debian and Ubuntu, check the Java store follows the system store. They can fall out of step.
- Rebuild container images from an updated base. A patched host does nothing for a JDK baked into an image last month.
- Rebuild GraalVM native images. They fix their trust settings at build time.
- Search for custom truststores (javax.net.ssl.trustStore, jssecacerts). Java's update doesn't touch them, so remove the four roots yourself.
- If you sign JARs or check signed ones, run jarsigner -verify -strict on them. A failure means the chain went through a blocked certificate.
- Check who issued your own certificates and those of the hosts your services call. Anything from emSign or AAA Certificate Services needs a plan.
- Check whether any Java service connects through networks you don't control, such as field devices, partner links or vendor proxies.
- Note the Red Hat split: RHEL's packaged OpenJDK uses the system certificates, while portable builds carry their own store.
Start with the inventory, because it's usually where the time goes. Java turns up in places nobody lists as Java: a monitoring agent, a backup tool, the runtime that came bundled with a vendor product. Each of those has its own cacerts file, and none of them picks up the new list until that specific runtime is updated.
# example output, one runtime at a time $ java -version 2>&1 | head -1 java version "21.0.13.0.3" 2026-10-24 LTS # Java 11+: any of the four roots left? $ keytool -list -cacerts | grep -iE 'emsign|aaa' # no output: the roots are gone # Java 8: point -keystore at jre/lib/security # custom truststores the JDK update skips $ ps -ef | grep -o 'trustStore=[^ ]*' | sort -u
A clean keytool result tells you the roots are gone. It doesn't prove the client rejects a bad chain. The researchers behind the disclosure run test hosts under emudhra.we-have-a-problem.com that serve chains through the compromised intermediates, including the cross-signed ones. If a Java client can still connect to them from the place it actually runs, it isn't protected yet.
A rollout order that doesn't break production
- 01Inventory
Find every Java runtime, its build, and whether it uses the default cacerts or a truststore of its own. Include vendor appliances and agents.
- 02List the outside hosts
For each Java service, list the HTTPS endpoints it calls: banks, payroll, tax services, identity providers, partner APIs. These are what the root removal could break.
- 03Test on a patched build
Install the October 24 build in a test environment and run the integration tests. A PKIX path building error on a host means its chain ends at one of the removed roots.
- 04Sort out the failures
Ask that partner to serve a certificate from another CA or a chain that ends at a root Java still trusts. Don't put the removed roots back into the shared cacerts.
- 05Roll out and rebuild
Update hosts, then rebuild container and native images. Vendor products that bundle Java wait for the vendor's own patch, so track each one.
- 06Verify
Rerun the keytool check on every runtime and point one client at the disclosure's test hosts. Record the result for auditors.
Harden so the next one hurts less
This won't be the last time a certificate authority fails. Chrome and Firefox had the bad certificates blocked within hours of the report. Java's first fix came four days later and its second three days after that, and every container image and bundled runtime is still on its own timetable. The work that shortens that gap is mostly about knowing where your trust stores are and being able to change them quickly.
Before: copies of the list everywhere, and nobody's counted them
Each host, container image and vendor product ships its own cacerts file, and nobody knows how many exist. A change to the list waits for every one of them to be patched.
After: one known list, updated on purpose
Runtimes are inventoried, images rebuild when the JDK changes, custom truststores come from one reviewed source, and outside hosts are tested on every Java update.
- Nobody can say how many Java runtimes exist
- Container images keep whatever JDK they were built with
- Custom truststores copied from cacerts years ago
- Revocation checking off, the Java default
- Outside HTTPS hosts found when one breaks
- Someone keeps a list of every runtime, its build and its truststore
- When the base JDK changes, the pipeline rebuilds every image
- Custom truststores come from one reviewed copy. Changes go through a ticket
- Revocation checking is on wherever the extra network lookup doesn't hurt
- Each service keeps a written list of the hosts it calls. Someone tests them on every Java update
Revocation checking deserves a closer look than it usually gets. Java leaves it off by default, which is why a revoked certificate can still work against a Java client. Oracle's interim advice after the first alert was to turn it on with -Dcom.sun.net.ssl.checkRevocation=true -Dcom.sun.security.enableCRLDP=true. It adds a network lookup to handshakes and fails differently when the revocation server can't be reached, so test it on one service before you make it the default.
Think you were intercepted, or the update broke a partner? Start here
Suspect interception or a broken partner link? Work through it in this order
Two things can go wrong here. Someone may have used a forged certificate against a Java client before you patched, or the patch may stop a real partner connection working. The first phases cover the first case, the last ones the second.
- 01Containfirst hour
- Update the affected runtime, or apply Oracle's blocked.certs replacement if you can't, so no new forged certificate works.
- Move the service off the network path you don't trust: a different egress, a VPN or a direct link.
- 02Investigatefirst day
- Check TLS inspection, proxy or firewall logs for connections where the server certificate chained to emSign or AAA Certificate Services.
- Ask each partner which certificate their host uses and compare it with what your logs show it served. If they don't match, dig in.
- Work out what the service sent over those connections, such as passwords, API tokens or customer records. That list decides what you rotate.
- 03Rotatefirst days
- Rotate every credential and token the service sent over a connection you can't vouch for.
- Ask the partners involved to look for logins or API calls from places you don't recognise.
- 04Fix a broken connectionas it happens
- Read the error: a PKIX path building failure after the update usually means the server's chain ends at a removed root.
- Ask the server owner for a certificate from another CA. That's the real fix.
- If you need a short bridge, use a per-app truststore for that one host with an end date. Never edit the shared cacerts.
- 05Report and learnfirst week
- If data may have been exposed, bring in legal early. Sector rules or contracts may require a notice, often with a deadline.
- Call your insurer early. Most policies have a notice window, and if you miss it the claim can get harder.
- Add the runtime inventory and endpoint tests to the normal patch process so the next CA failure is a routine change.
What this could look like: three typical setups
What this could look like: three typical setups
- the setup
- A distributor runs Oracle E-Business Suite with Java on the middle tier. Interfaces send payment files to two banks and call a tax service over HTTPS.
- what happens
- The team installs the October 24 build in test. One bank's endpoint fails with a PKIX error, because its chain ends at AAA Certificate Services.
- what to do
- Hold production until the bank fixes its chain, or bridge with a per-app truststore for that one host with an end date. Roll the update out to everything else now.
- the setup
- A SaaS company runs about forty Java services as containers built on a JDK base image, plus a few GraalVM native binaries. Hosts update on their own.
- what happens
- The hosts are patched, but every image still has last month's cacerts, and the native binaries carry trust settings fixed at build time. All of them still trust the four roots.
- what to do
- Rebuild every image from an updated base and rebuild the native binaries. Then run the keytool check inside a running container and test against the disclosure's hosts.
- the setup
- A logistics firm's public API runs on a certificate it gets from eMudhra over ACME, renewed automatically. Its customers call that API from their own systems, and plenty of those are Java.
- what happens
- Chrome expects to stop trusting the G3 root on October 27, and Java customers who install the October 24 build stop trusting all three emSign roots. The API starts failing for those callers.
- what to do
- Replace the certificate with one from another CA now, before the customers patch. eMudhra says it will help affected customers move.
These three are made up, and none of them is a real incident or a Cohash client. They all install the same Java update. Where it hurts depends on choices made long before, like whose certificate a partner bought or who rebuilds the images.
How Cohash helps
We support Oracle E-Business Suite, PeopleSoft and Oracle identity estates, including their patch cycles and regression testing. For this alert we'd start with the Java inventory and the list of outside hosts, test the October 24 build against them, then roll it out without surprises at month end. See our Oracle EBS and Fusion ERP page, our PeopleSoft page and our Oracle identity page. For engineers to help with a patch window, see who we can staff. To find out first where your estate is exposed, start with an assessment.
What to take from this
- 01
Update Oracle Java to the October 24 build for your line: 8u511-b33, 11.0.33.0.3, 17.0.21.0.3, 21.0.13.0.3, 25.0.5.0.3 or 27.0.1.0.3.
- 02
The October 21 build isn't enough for CVE-2026-114820. It blocked the bad certificates but left the four roots in place.
- 03
Test outside HTTPS connections first. Servers whose chains end at the emSign or AAA roots will fail after the update.
- 04
Rebuild container images and GraalVM native images. Updating the host doesn't change the JDK inside them.
- 05
Custom truststores don't change with the JDK. Find them and remove the four roots yourself.
- 06
If your own sites use eMudhra certificates, replace them now. Chrome expects to drop the G3 root on October 27.
- How Cohash delivers Oracle Fusion ERP & E-Business Suite: scope, roles and architecture
- How Cohash delivers Oracle PeopleSoft: scope, roles and architecture
- How Cohash delivers Oracle Identity & Access Management: scope, roles and architecture
- Hire vetted Oracle Fusion ERP & E-Business Suite engineers
- ERP systems
- Book a 30-minute working session with a senior engineer
01Am I affected by CVE-2026-114820?
Yes, if any Oracle Java SE or GraalVM runtime you run is older than the October 24 build. That includes the October 21 builds, the ones that fixed CVE-2026-91403, so a runtime you patched this week may need patching again. On Java SE you want 8u511-b33, 11.0.33.0.3, 17.0.21.0.3, 21.0.13.0.3, 25.0.5.0.3 or 27.0.1.0.3. For GraalVM, the fixed versions are in Oracle's Patch Availability Document.
02My browser already blocks these certificates. Isn't Java covered too?
Java doesn't use the browser's or the operating system's certificate list. It ships its own cacerts file, doesn't check Certificate Transparency logs, and leaves revocation checking off by default. So Chrome's and Firefox's blocks don't reach a Java program until its own runtime is updated.
03Will the update break anything?
It can. Java removed emSign Root CA - G1 and G2 and AAA Certificate Services as well as the G3 root, so any server whose chain ends at one of them will fail after the update, even if it's legitimate. Test the outside hosts your Java services call before you roll it out.
04Does this affect Oracle E-Business Suite, PeopleSoft or WebLogic?
Any of them running on an Oracle JDK has the same cacerts file and needs the updated build. Where a product ships its own bundled Java, follow that product's patch guidance and check certification before you swap the JDK yourself.
05We use OpenJDK from Red Hat or Ubuntu, not Oracle. What do we do?
On RHEL, the packaged OpenJDK reads the system ca-certificates, so updating that package covers it, while portable OpenJDK builds carry their own store and need their own update. On Debian and Ubuntu, check that the Java store follows the system store. For other OpenJDK builds, check your vendor's notes.
06Has anyone used the eMudhra keys in an attack?
None has been reported. Google found no website certificate from the six TLS intermediates in Certificate Transparency logs before Chrome blocked them, and CERT-In said on October 21 that the public disclosures don't establish confirmed malicious use. The keys are now public, so an unpatched Java client stays exposed.
07Do we need to replace our own certificates?
Mainly if eMudhra issued them. Chrome expects to stop trusting emSign ECC Root CA - G3 on October 27, and once your customers patch Java, it won't trust any of the three emSign roots. Google's advice to site owners with G3 certificates is to get a new one from another CA straight away. A certificate that still chains to AAA Certificate Services won't work with patched Java either.
Three questions, about a minute
Pick an answer and we'll tell you if it's right, and why it is or isn't. The score stays in this browser.
-
Q1You installed JDK 21.0.13.0.2 on the app servers for the first eMudhra alert. Is that enough?
show the answer
B. No. The second alert needs 21.0.13.0.3, which also removes the roots The October 21 builds blocked the 16 bad certificates but left the roots in cacerts. Oracle lists 21.0.13.0.2 as affected by the second alert, and 21.0.13.0.3 is the fix.
-
Q2After updating Java, a partner's API fails with a PKIX path building error. Firefox loads the same host fine. What's most likely?
show the answer
C. Their chain ends at a root Java just dropped and Firefox still trusts Java removed emSign Root CA - G1, which Mozilla is keeping for now, along with G2 and AAA Certificate Services. The fix is a new certificate on the partner's side, not putting the roots back.
-
Q3Every host is on the October 24 JDK now. What could still be trusting the bad chains?
show the answer
A. Containers built from last month's image, and native binaries Images carry the JDK and cacerts they were built with, and native images fix their trust settings at build time. Both need rebuilding.