Repository navigation
Distrust the compromised eMudhra intermediates - #13055
Conversation
The private keys of eight eMudhra intermediate CAs (six TLS, two code-signing) were generated with too little entropy and can be recovered from public certificate data. Browsers blocked them on 2026-10-17 and eMudhra revoked them. Go 1.26.10 and Node 24.22.1 are the releases that distrust them; this moves every toolchain the registry builds and publishes with to those releases. - tools/resourcedocsgen/go.mod: add `toolchain go1.26.10`. Every workflow that builds resourcedocsgen reads `go-version-file`, so CI moves with it. This morning's master build still set up Go 1.26.6, and resourcedocsgen fetches provider schemas over HTTPS with that binary. - bucket-cleanup.yml, test-ci-scripts.yml: read the toolchain from the same go.mod instead of a floating `1.26` spec that resolved to whatever patch the runner had cached. - Node: pin 24.22.1 everywhere `24.x` was used (this morning's run used cached 24.21.0) and on community-package-check, which was still on Node 20. - mise.toml: pin both tools so `mise install` picks up the fixed releases locally. Verified with Go's own verifier against the disclosure's test host (https://dv-g3b-emudhra.we-have-a-problem.com/), using the pre-fix Mozilla bundle as the root pool: go1.26.6 accepts the chain with HTTP 200, go1.26.10 rejects it with "x509: no valid chains built". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The registry-mirror-discover and registry-mirror-publish binaries are built with `go install` and cached under a key that held only REGISTRY_MIRROR_TOOLS_COMMIT. The install step skips the build whenever a cached binary exists, so a toolchain bump never reached them: after the Go 1.26.10 pin, CI would have kept restoring binaries built with 1.26.6, including registry-mirror-publish, the primary HTTPS client to api.pulumi.com in publish.yml. Give each setup-go step an id and append its resolved go-version output to the five cache keys, so the binaries rebuild on every toolchain change. Using the resolved version rather than hashFiles(go.mod) avoids a rebuild on every dependency bump. Also note in BUILD-AND-DEPLOY.md that the Go and Node pins are now exact and need bumping by hand on security releases, since Dependabot does not cover them. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Thanks, the cache gap was real: every key held only the mirror-tools commit, and the install step skips I keyed on the resolved toolchain rather than On the minor points:
|
|
Your site preview for commit b538808 is ready! 🎉 http://registry--origin-pr-13055-b5388087.s3-website.us-west-2.amazonaws.com/registry/ |

Proposed changes
The private keys of eight eMudhra intermediate CAs (six TLS, two code-signing) were generated with too little entropy and can be recovered from public certificate data. Browsers blocked them on 2026-10-17 and eMudhra revoked them. No misuse has been confirmed. This moves every toolchain the registry builds and publishes with to a release that distrusts them:
tools/resourcedocsgen/go.mod: addtoolchain go1.26.10, the Go release the disclosure lists as fixed for 1.26. Every workflow that buildsresourcedocsgenusesgo-version-file, so CI moves with it. This morning's master build (run 39559241101) still set up Go 1.26.6, andresourcedocsgenfetches provider schemas over HTTPS with that binary.bucket-cleanup.yml,test-ci-scripts.yml: read the toolchain from the samego.modinstead of a floating1.26spec, whichsetup-goresolves to whatever patch the runner has cached.24.xwas used (this morning's run used cached 24.21.0) and oncommunity-package-check.yml, which was still on Node 20.mise.toml: pin both tools somise installpicks up the fixed releases locally.registry-mirror-discover/registry-mirror-publishcaches: the fiveactions/cachekeys held only the mirror-tools commit, and the install step skipsgo installwhen a cached binary exists, so the toolchain bump would never have reached them.registry-mirror-publishis the primary HTTPS client toapi.pulumi.cominpublish.yml. Eachsetup-gostep now has an id and its resolvedgo-versionis part of the key, so the binaries rebuild on every toolchain change.BUILD-AND-DEPLOY.md: version tables, plus a note that the Go and Node pins are exact and need bumping by hand on security releases, since Dependabot does not cover them.Not changed, for the record:
scripts/ci/run viauv run --with requestsorpip install requestswith no lock file, so they resolve the currentcertifi(2026.10.19, which drops the emSign roots) on every run.pulumi-commandshortcode fetches fromapi.github.comwith it. No Hugo release built with a fixed Go exists yet (0.168.0 is from 2026-10-13). That one call is the residual exposure until Hugo ships one, tracked in Upgrade Hugo to a release built with a Go that distrusts the compromised eMudhra intermediates #13056.References:
Test plan
go mod tidywith Go 1.26.10: no diff beyond thetoolchainlinego build ./...,golangci-lint run(0 issues) andgo test ./...(all pass) intools/resourcedocsgenmake lint-markdown: 0 errorshttps://dv-g3b-emudhra.we-have-a-problem.com/with the pre-fix Mozilla bundle (cacert-2026-09-25.pem) as the root pool, so Go's own verifier runs rather than the macOS one: go1.26.6 accepts the chain with HTTP 200, go1.26.10 rejects it withx509: no valid chains builtmise installresolves togo1.26.10andv24.22.1🤖 Generated with Claude Code