Repository navigation
Web3Signer security notice: eMudhra CA compromise #1269
usmansaleem
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Web3Signer security notice: eMudhra CA compromise
Last updated: 2026-10-27
Summary
A default Web3Signer setup is not affected and needs no action. Default here means: keys loaded from local files, a bundled network, no TLS options, and no remote key vaults. Web3Signer is affected only if you turn on one of the features listed below.
On 2026-10-17, the private keys of eight eMudhra (emSign) intermediate certificate authorities were shown to be recoverable from their public certificates. They were revoked on 2026-10-18, and browsers, operating systems and Go have since blocked them.
Java does not check revocation by default, so Java runtimes need their own fix. Anyone holding one of these keys can create a certificate that Java accepts as genuine. This includes the Eclipse Temurin runtime in the Web3Signer Docker images up to 26.10.1.
OpenJDK shipped two fixes. On 2026-10-20 it blocked the compromised intermediates and their Sectigo cross-signs (CVE-2026-91403). On 2026-10-23 it removed four eMudhra and Sectigo roots (CVE-2026-114820).
On a runtime with neither fix, Web3Signer can be exposed in two ways:
https://endpoint (a key vault, a cloud key service or the downstream Ethereum node), an attacker who can intercept the traffic can impersonate that endpoint. For key vaults, that includes reading the private keys the vault returns.Am I affected?
How exposed you are depends on how Web3Signer is configured and where it runs. Check each row:
--tls-allow-ca-clients=true--tls-known-clients-fileif that is also set.type: hashicorp) withtlsEnabled: truetlsKnownServersPathdoes not prevent this, because certificates signed by a trusted CA are still accepted.--azure-vault-enabled, ortype: azure-secret/azure-keysigner configs)--aws-secrets-enabled, ortype: aws-secretsigner configs)--gcp-secrets-enabled)--aws-kms-enabled, ortype: aws-kmssigner configs)eth1with--downstream-http-tls-enabled--downstream-http-tls-ca-auth-enableddefaults totrue, so the connection to the Ethereum node trusts Java's default roots, even when--downstream-http-tls-known-servers-fileis seteth2 --networkset to anhttps://URLmainnet) download nothing.--tls-known-clients-fileonly, without--tls-allow-ca-clientseth1with--downstream-http-tls-known-servers-fileand--downstream-http-tls-ca-auth-enabled=falseThese parts of Web3Signer are not affected:
file-keystoreandfile-rawsigner configs,--keystores-path).sslrootcert), not Java's trust store.--metrics-enabled): Prometheus pulls from a plain HTTP endpoint on Web3Signer. No TLS is involved.--metrics-push-enabled): it pushes over plain HTTP only.How your environment changes the risk
localhost, or behind a firewall that only admits your validator clients, greatly reduces the risk.--key-manager-api-enabled) and the Commit-Boost API (--commit-boost-api-enabled)./etc/ssl/certs/java/cacerts, which takes extra steps to update (Debian bug 1069251).What an attacker could do
--tls-allow-ca-clients=trueeth2keys: voluntary exits (irreversible) and builder registrations that redirect fees. If slashing protection is disabled, slashable blocks and attestations too. Foreth1keys: sign and send transactions that move funds. With the Key Manager API enabled: delete or import keys.azure-key)eth1)No exploitation has been reported.
How to reduce exposure in Web3Signer
Inbound client authentication: remove the CA flag
Remove
--tls-allow-ca-clientsand list your validator clients' certificate fingerprints in--tls-known-clients-file. This fixes the issue, regardless of the roots Java trusts. If you must keep the flag, also fix your Java runtime as described below.Restrict outbound trust where Web3Signer supports it
These settings protect a connection whatever roots Java trusts:
eth1): set--downstream-http-tls-known-servers-fileto your node's certificate fingerprint and--downstream-http-tls-ca-auth-enabled=false.--network.How to fix your Java runtime
Docker image users: upgrade
Upgrade to the next Web3Signer release after 26.10.1. Both images (
consensys/web3signer:26.10.2andconsensys/web3signer:26.10.2-distroless) will ship Eclipse Temurin 25.0.5+8. That build no longer has the emSign ECC Root CA - G3 root and does not include AAA Certificate Services. We tested both images: they reject all 12 test chains published at emudhra.we-have-a-problem.com (#1267). Your existing arguments, volumes and ports stay the same.Both commands should print
Temurin-25.0.5+8or later:Binary distribution users
The
.tar.gzand.zipdistributions run on the Java installed on the host. We recommend you follow the official CVE guidance for checking if you are vulnerable and fixing:After changing the Java runtime or its trust store, restart Web3Signer, because a running process keeps the old trust store. Then check the logs to confirm that Web3Signer still loads keys from each vault, reaches the downstream node, and accepts connections from your validator clients.
What the Web3Signer team is doing
The next Web3Signer release updates both Docker images to Eclipse Temurin 25.0.5+8 (#1267). We will update this notice when that release is published. Binary distributions use the host's Java, so follow the Java runtime guidance above.
Special Thanks
Thanks to Consensys Diligence, our security partner, for flagging this issue.
References
ca-certificatesversions and the Java trust store rebuildca-certificates-javaupdates don't refresh Java's trust storeAll reactions