Skip to content

fix(build): build with Go 1.27.3 to distrust compromised eMudhra CAs - #621

Merged
j-nowak merged 4 commits into
mainfrom
claude/cli-fixes-6c716f
Oct 21, 2026
Merged

j-nowak merged 4 commits into
mainfrom
claude/cli-fixes-6c716f

Conversation

@j-nowak

@j-nowak j-nowak commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What

  • go.mod: go 1.27.1 → go 1.27.3
  • build-and-release.yml, preview-build.yml: the six setup-go steps use go-version-file: go.mod instead of go-version: "1.25"
  • .tool-versions: golang 1.26.2 → golang 1.27.3
  • Patch changeset for the release notes

Why

Eight eMudhra (emSign) intermediate CA keys were compromised (CVE-2026-111943).

Go 1.27.3 and 1.26.10 add a hard-coded SPKI blocklist for the eight CAs in crypto/x509. The check runs in the Go verifier and on the macOS and Windows platform-verifier paths, and it also catches the Comodo AAA cross-signed chains.

Today's release builds don't get it. CI installs Go 1.25, and GOTOOLCHAIN=auto then switches to the go.mod minimum, go1.27.1, which has no fix. With this change, go.mod sets the version CI installs.

Evidence

Same program, built with each toolchain, verifying the researcher's proof hosts (dv-g3b-emudhra.we-have-a-problem.com, dv-g3b-aaa-emudhra.we-have-a-problem.com). The chain's own top cert is the only trusted root, so the OS trust store plays no part:

Toolchain emSign chain Comodo AAA cross-sign
go1.27.1 ACCEPTED ACCEPTED
go1.27.3 REJECTED (x509: no valid chains built) REJECTED

Intermediate EM DV TLS CA - G3B has SPKI sha256 ebed6475…5105, the first entry in go1.27.3's distrustedSPKIHashes.

Testing

  • go mod tidy with go1.27.3: no changes beyond the go directive
  • go build → go version cre reports go1.27.3
  • Unit tests: 1651 passed in 99 packages (e2e under test/ not run)

🤖 Generated with Claude Code

j-nowak and others added 4 commits October 21, 2026 06:32
Go 1.27.3 hard-codes distrust of the eight compromised eMudhra (emSign)
intermediate CAs (CVE-2026-111943) in crypto/x509, on the Go verifier
and on the macOS and Windows platform-verifier paths. Release builds
resolved to go1.27.1 (setup-go installed 1.25, then GOTOOLCHAIN=auto
switched to the go.mod minimum), which accepts chains through those
CAs, so an on-path attacker could impersonate the CRE API, login,
Vault gateway or RPC endpoints the CLI dials.

- go.mod: go 1.27.1 -> 1.27.3
- release and preview workflows: setup-go reads the version from go.mod
- .tool-versions: golang 1.27.3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
golangci-lint v2.13.1 cannot read Go 1.27.3 export data ("export data
version 5 is greater than maximum supported version 4"), so ci-lint
failed on typecheck. v2.15.0 lints Go 1.27.3 cleanly (same pairing as
smartcontractkit/chainlink-common#2481).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v2.15.0 lint rejects both forms of discarding the goroutine's error:
errcheck flags a bare <-errCh and staticcheck S1005 flags _ = <-errCh.
The error is already delivered to the model via p.Send, so the channel
only needs to signal that the goroutine has exited; use a closed
chan struct{} for that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@j-nowak
j-nowak marked this pull request as ready for review October 21, 2026 08:49
@j-nowak
j-nowak requested a review from a team as a code owner October 21, 2026 08:49
@j-nowak
j-nowak added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 5911eba Oct 21, 2026
26 checks passed
@j-nowak
j-nowak deleted the claude/cli-fixes-6c716f branch October 21, 2026 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants