On this page · 4 sections
  1. Go Binaries That Must Be Rebuilt, and How to Find Them
  2. Where the Denylist Matters: Linux and Unpatched Trust Stores
  3. What the URGENT Track Changed in Go's Release Process
  4. Sources

Security advisory

Status as of 2026-11-13

CVE-2026-111943

Go standard library crypto/x509 · Distrust compromised intermediate certificates in crypto/x509

CVSS 3.16.8Medium
Affected
before 1.26.10, from 1.27.0-0 before 1.27.3
First fixed in
1.26.10, 1.27.3The earliest release on each line that fixes these CVEs. The article names the release to install.
Exploited
None known · CISA SSVC
Published
2026-10-21

Data: CVE record

TL;DR

Go 1.27.3 and 1.26.10, released on October 19, add a denylist to crypto/x509 that rejects certificates chaining to eight eMudhra intermediates whose private keys were trivially weak. The issue is tracked as CVE-2026-111943 and affects Go before 1.26.10 and 1.27.0 through 1.27.2. The protection exists only in binaries rebuilt with a fixed toolchain; a binary built earlier keeps trusting those intermediates on Linux whatever Go version is installed on the host.

  • What happened: on October 17, Mozilla added eight intermediates issued under an eMudhra root, six for TLS and two for code signing, to OneCRL. Researchers found the keys could be recovered in microseconds, which would let anyone sign TLS certificates for any domain.
  • Why Go acted itself: on Windows and macOS, Go hands certificate checks to the platform, but on Linux it uses its own verifier, and Linux has no uniform revocation mechanism. The denylist covers Linux and platforms that might not receive trust store updates.
  • Speed: Go shipped the fix about seven and a half hours after the first notification, in its first release on the URGENT security track. By the morning of October 20, researchers had published the weak keys.
  • Rating: the CVE record carries a CVSS 3.1 score of 6.8, added by CISA-ADP, and CISA's SSVC assessment of October 30 rates exploitation as none.
  • Who must act: anyone running Go programs that make TLS connections through net/http, crypto/tls or a dependency such as gRPC.

Go Binaries That Must Be Rebuilt, and How to Find Them #

The fix lives in the standard library compiled into each program, so upgrading the Go installation changes nothing for binaries already built. The Go Security team's post, by Roland Shoemaker, says binaries rebuilt with Go 1.27.3 or 1.26.10 reject the compromised intermediates automatically. Teams need to rebuild every service, CLI tool and container image that talks TLS, starting with those that run on Linux.

The post names three checks. go version shows the installed toolchain, go version -m followed by a binary path shows which Go built that binary, and govulncheck -mode=binary on a binary reports whether it is affected by this issue. A binary that reports a Go version before 1.26.10, or 1.27.0 to 1.27.2, needs a rebuild with 1.27.3, 1.26.10 or a later release on those lines.

Where the Denylist Matters: Linux and Unpatched Trust Stores #

The CVE record states that on most platforms Go uses the system root certificates, but in narrower cases system trust stores may not be updated without further action. The denylist makes Certificate.Verify in crypto/x509 return an error for any of the distrusted intermediates, so a Go program refuses them even where the operating system still trusts the chain. On Linux this is currently the only protection, which is why the Go team plans revocation support there, including an investigation of the upki project in issue #82402.

What the URGENT Track Changed in Go's Release Process #

A normal Go security release is pre-announced three to seven days ahead. This time the team was alerted at 11:45 PDT on October 19, finished the patch at 14:00, started the release at 15:00 and announced it at 19:13, with deliberately vague wording so attackers would not learn how to exploit the keys before defenders had patched. The post says the release process alone took just under four and a quarter hours and that the team has since changed it to be faster, and that a short pre-announcement when the release starts would have given users a few hours to prepare.

The Sentinel’s Call

Every Go service that makes TLS connections, above all on Linux, should be rebuilt with Go 1.27.3, 1.26.10 or later, because the protection comes only from the rebuilt binary. Running govulncheck in binary mode on deployed artifacts shows which ones still lack it. Installing a newer Go on a host without rebuilding leaves existing binaries exposed.

Our judgement, drawn only from the facts and sources above.

Sources

  1. CVE-2026-111943: Distrust compromised intermediate certificates in crypto/x509 cve.org · Oct 21, 2026
  2. Our Response To The eMudhra Key Disclosure Incident - The Go Programming Language go.dev · Oct 26, 2026

More on Go

1 other article, newest first

Next reading

Edited and approved by Jarosław Krzemiński. Spotted a mistake? Report a correction or read the corrections policy.