Introduction
On 2026-10-17, the private keys of eight eMudhra intermediate certificate authority (CA) certificates were reported as compromised. The keys were generated incorrectly by the CA and can be recovered from the certificates themselves. The certificates were issued in April 2025, so the keys may have been recoverable since then. Anyone holding one of these keys can issue a TLS certificate for any domain. An attacker who can intercept or redirect a client's traffic can use such a certificate to impersonate a server.
The CA has revoked the intermediates, and the major browsers and operating system vendors have blocked them. Clients that don't check revocation are still exposed. They trust the intermediates for as long as a root that signs them stays in their trust store.
On Rocky Linux, the system trust store comes from the ca-certificates package. Two roots in that store chain to the compromised intermediates:
emSign ECC Root CA - G3, through a cross-sign ofemSign Root TLS CA - G3Comodo AAA Services root
Mozilla has removed emSign ECC Root CA - G3 from its trusted root list in NSS 3.131.1 (built-in root list version 2.92). Mozilla had already stopped trusting Comodo AAA Services root for TLS before this incident. Until a ca-certificates package with the updated list is available for your variant, the workaround in this article distrusts both roots locally.
CVE-2026-113812 (CWE-295, Improper Certificate Validation) covers the copy of this root list in the Perl Mozilla::CA module. The upstream module removed the root in version 20261020. On Rocky Linux, the perl-Mozilla-CA package points Mozilla::CA at the system bundle, so the same workaround covers Perl clients (see Notes).
Problem
Any client that reads the system trust store and doesn't check revocation accepts certificates issued by the compromised intermediates. This includes OpenSSL, curl, dnf, Java and Perl clients that use Mozilla::CA. An attacker in a position to intercept traffic from such a client can present a forged certificate for any host, and the client accepts it as valid.
Which roots are trusted for TLS depends on the ca-certificates build. Older builds trust both roots. Current builds trust only emSign ECC Root CA - G3. CIQ has confirmed the following builds:
| Variant | ca-certificates build |
Roots trusted for TLS |
|---|---|---|
| RLC Pro LTS 8.6 | 2024.2.69_v8.0.303-80.0.el8_6.86ciq_lts |
Both |
| RLC Pro LTS 9.2 | 2022.2.54-90.2.el9 |
Both |
| RLC Pro LTS 9.2 | 2023.2.60_v7.0.306-90.1.el9_2 |
Both |
| RLC Pro LTS 9.2 | 2024.2.69_v8.0.303-91.4.el9_2.92ciq_lts |
Both |
| RLC Pro LTS 9.6 | 2024.2.69_v8.0.303-91.4.el9_4 |
Both |
| RLC Pro FIPS 9.6 | 2024.2.69_v8.0.303-91.4.el9_4 |
Both |
| RLC Pro 9 | 2025.2.80_v9.0.305-91.el9 |
emSign ECC Root CA - G3 |
| RLC Pro 10 | 2025.2.80_v9.0.305-102.el10 |
emSign ECC Root CA - G3 |
| CIQ Bridge | Pending | Both |
Rocky Linux community releases are also affected. CIQ does not publish patched packages for community Rocky Linux editions. For community release patching status, refer to Rocky Linux Errata.
Treat any variant not listed above as affected until the check in the next section shows otherwise.
The attack requires the ability to intercept or redirect network traffic between the client and the server. It doesn't give an attacker access to the system itself.
Status
- No fixed
ca-certificatespackage is available yet for Rocky Linux 8, 9, 10, the CIQ LTS and FIPS variants, or CIQ Bridge. This article will be updated when fixed packages ship. - A tested workaround is available. Adding both roots to the local trust blocklist removes them from every bundle that
update-ca-trustgenerates, including the Javacacertsfile. It takes effect for new connections without a reboot. - Recommended action: Check your systems with the commands below. Apply the workaround on every affected system, prioritizing systems that make outbound TLS connections over untrusted networks.
- Applications with their own CA bundle are not covered by the workaround. Python
certifi, Node.js and statically built Go binaries need their own updates (see Notes). - Open a support case if you need help assessing exposure across your fleet.
Checking a System
List the affected roots that the system trusts for TLS:
trust list --filter=ca-anchors --purpose=server-auth | grep -E 'label: (emSign ECC Root CA - G3|Comodo AAA Services root)$'
Include --purpose=server-auth. Without it, current builds also list Comodo AAA Services root, which they trust only for email and code signing.
Then test against the two hosts published by the incident page. Each host tests a different root path, so check both:
curl -sS -o /dev/null https://dv-g3b-emudhra.we-have-a-problem.com/; echo $?
curl -sS -o /dev/null https://dv-g3b-aaa-emudhra.we-have-a-problem.com/; echo $?
The system is affected if the trust list command prints any label, or if either curl command returns exit code 0. Exit code 60 (certificate verification failed) means the system rejects that chain. Exit code 7 or 28 means the test host could not be reached. Those hosts are under heavy load, so retry after a few seconds.
Mitigation
The workaround copies both roots into the local blocklist folder and regenerates the trust bundles. Certificates in that folder are distrusted, even when the same certificate is still shipped by the ca-certificates package. Blocking Comodo AAA Services root is needed only on the older builds, but it is safe to apply everywhere.
Rocky Linux 9, 10, and el9 LTS and FIPS Variants
Back up the blocklist folder first:
sudo cp -a /etc/pki/ca-trust/source/blocklist /root/blocklist.bak
Add both roots to the blocklist and regenerate the trust bundles:
sudo trust extract --overwrite --format=pem-bundle --filter='pkcs11:object=emSign%20ECC%20Root%20CA%20-%20G3;type=cert' /etc/pki/ca-trust/source/blocklist/emSign_ECC_Root_CA_-_G3.pem
sudo trust extract --overwrite --format=pem-bundle --filter='pkcs11:object=Comodo%20AAA%20Services%20root;type=cert' /etc/pki/ca-trust/source/blocklist/Comodo_AAA_Services_root.pem
sudo update-ca-trust
Rocky Linux 8, el8 LTS Variants, and CIQ Bridge
On el8 and CentOS 7 (CIQ Bridge), the folder is named blacklist instead of blocklist. Back it up first:
sudo cp -a /etc/pki/ca-trust/source/blacklist /root/blacklist.bak
Add both roots and regenerate the trust bundles:
sudo trust extract --overwrite --format=pem-bundle --filter='pkcs11:object=emSign%20ECC%20Root%20CA%20-%20G3;type=cert' /etc/pki/ca-trust/source/blacklist/emSign_ECC_Root_CA_-_G3.pem
sudo trust extract --overwrite --format=pem-bundle --filter='pkcs11:object=Comodo%20AAA%20Services%20root;type=cert' /etc/pki/ca-trust/source/blacklist/Comodo_AAA_Services_root.pem
sudo update-ca-trust
After Applying
No reboot is needed for new connections. Long-running processes that loaded the trust bundle at startup, such as Java application servers, keep the old bundle until they restart.
Warning: Any server whose only chain of trust leads to one of these two roots will fail TLS verification after the workaround. In CIQ testing,
dnf makecache,depot.ciq.com,dl.rockylinux.organdgoogle.comkept working on every tested variant. Test connections to your own internal and third-party services before you roll the workaround out across a fleet.
The blocklist lives in /etc, so ca-certificates package updates don't overwrite it.
Verification
Run the checks from Checking a System again:
trust list --filter=ca-anchors --purpose=server-auth | grep -E 'label: (emSign ECC Root CA - G3|Comodo AAA Services root)$'
curl -sS -o /dev/null https://dv-g3b-emudhra.we-have-a-problem.com/; echo $?
curl -sS -o /dev/null https://dv-g3b-aaa-emudhra.we-have-a-problem.com/; echo $?
The trust list command should print nothing, and both curl commands should fail with a certificate error and return exit code 60.
CIQ tested the workaround on RLC Pro LTS 8.6, 9.2 and 9.6, RLC Pro FIPS 9.6 in FIPS mode, RLC Pro 9.8, and RLC Pro 10.2. On each system, both anchors were removed, and curl, Perl Mozilla::CA and Java clients rejected the test hosts afterward.
Reverting the Mitigation
Revert the workaround only after a fixed ca-certificates package is installed. Remove the two blocklist files and regenerate the trust bundles.
On Rocky Linux 9, 10, and el9 LTS and FIPS variants:
sudo rm -f /etc/pki/ca-trust/source/blocklist/emSign_ECC_Root_CA_-_G3.pem /etc/pki/ca-trust/source/blocklist/Comodo_AAA_Services_root.pem
sudo update-ca-trust
On Rocky Linux 8, el8 LTS variants, and CIQ Bridge:
sudo rm -f /etc/pki/ca-trust/source/blacklist/emSign_ECC_Root_CA_-_G3.pem /etc/pki/ca-trust/source/blacklist/Comodo_AAA_Services_root.pem
sudo update-ca-trust
In CIQ testing, this restored the original trust bundles exactly. If the folder held other files before the workaround, compare it with the backup in /root.
Resolution
When a fixed ca-certificates package is available for your variant, install it:
sudo dnf update ca-certificates
For CIQ Bridge (CentOS 7) systems, use yum instead of dnf:
sudo yum update ca-certificates
Confirm that the trust list check from Checking a System still prints nothing with the blocklist files removed, then revert the workaround as described above. Run the curl checks afterward. Both should return exit code 60.
Notes
- Perl
Mozilla::CA(CVE-2026-113812). On Rocky Linux 8, 9 and 10, theperl-Mozilla-CApackage returns the system bundle path/etc/pki/tls/certs/ca-bundle.crtinstead of its own copy of the root list. In CIQ testing, Perl clients usingMozilla::CArejected both test hosts once the workaround was applied. Perl modules installed from CPAN into a separate path carry their own bundle and need version 20261020 or later. - Java.
update-ca-trustregenerates the Javacacertsfile. In CIQ testing, Java clients rejected both test hosts once the workaround was applied. Restart Java services so they load the regenerated file. - NSS applications. NSS applications read the system store through
p11-kitand are expected to honor the blocklist. CIQ has not tested this path. Run your own TLS checks from those applications against the two test hosts above. - Applications that ship their own CA bundle are not covered. Python
certifiin a virtual environment, Node.js and statically built Go binaries use a bundle compiled into or shipped with the application. Update them to the fixed versions listed on the incident page, for examplecertifi2026.10.19 or Node.js 22.23.4, 24.22.1 or 26.12.1. - Email and code signing trust. Blocking
Comodo AAA Services rootalso removes it from the email and code signing bundles. Systems that validate S/MIME or code signatures that chain to this root will reject them while the workaround is in place. - Browsers. Firefox, Chrome and other browsers that receive their vendor's revocation updates already block the compromised intermediates.