8000 SECURITY: microvm-rootfs: distrust emSign ECC Root CA - G3 via ca-certificates-bundle 20261020-r0 (CVE-2026-111943) by bryan-minimal · Pull Request #947 · gominimal/pkgs · GitHub
[go: up one dir, main page]

Skip to content

SECURITY: microvm-rootfs: distrust emSign ECC Root CA - G3 via ca-certificates-bundle 20261020-r0 (CVE-2026-111943) - #947

Merged
bryan-minimal merged 1 commit into
mainfrom
security/microvm-rootfs-ca-bundle-emudhra
Oct 21, 2026
Merged

bryan-minimal merged 1 commit into
mainfrom
security/microvm-rootfs-ca-bundle-emudhra

Conversation

@bryan-minimal
Copy link
Copy Markdown
Member

The guest image still trusts emSign ECC Root CA - G3 (SHA-256 86A1ECBA089C4A8D3BBE2734C612BA341D813E043CF9E8A862CD5C57A36BBE6B). Mozilla distrusted that root after eMudhra's intermediate key was compromised (CVE-2026-111943, Mozilla bug 2083449).

The root does not come from any .apk pin. It comes from the base layer: alpine-minirootfs-3.24.1 ships ca-certificates-bundle 20260611-r0 (lib/apk/db/installed, 119 roots, G3 included). Alpine shipped 20261020-r0 on every branch (MR !110124 to !110128), and that release drops G3 (118 roots). There is no newer minirootfs release that carries it, so bumping alpine_release cannot pick up the fix.

Change

  • build.ncl: adds ca-certificates-bundle-20261020-r0 to the SECURITY OVERRIDES OF THE BASE LAYER block, next to openssl, with the same DROP-WHEN comment. The package contains a single file, etc/ssl/certs/ca-certificates.crt, plus the etc/ssl/cert.pem and etc/ssl1.1/* symlinks, and it has no install script. The overlay therefore replaces the base layer's bundle outright. The existing apk-db reconcile then rewrites V: to 20261020-r0, because the minirootfs db records ca-certificates-bundle.
  • build.sh: adds a fail-closed guard. The build now fails if the staged /etc/ssl/certs/ca-certificates.crt is missing or empty, or if it still contains G3. The needle is a line of G3's base64 PEM body (its public key). I checked it against real files: it matches once in the 3.24.1 minirootfs bundle and zero times in the 20261020-r0 bundle on both arches. I also corrected the build.sh comment that said the CA bundle needs an install script.

Verified

  • Index: taken from the v3.24 main APKINDEX for both arches, P:ca-certificates-bundle V:20261020-r0. The package has no D: deps, so the closure does not change.
  • Integrity: both .apk files were downloaded from dl-cdn into fresh directories. Each one was checked against its arch's APKINDEX entry three ways:
    • size S:: x86_64 107116, aarch64 107099
    • C:, the SHA1 of the control segment
    • the .PKGINFO datahash against the sha256 of the data segment
  • Contents: the new bundle has 118 certs on both arches and G3 is absent (checked by SHA-256 fingerprint). The base layer's bundle has 119 certs with G3 present.
  • Mirror: neither object was in gs://minimal-staging-archives/alpine/v3.24/main/<arch>/, so I uploaded both with --no-clobber. I then re-downloaded them, and both are byte-identical to the verified dl-cdn copies:
    • aarch64 d0a573c2…176a
    • x86_64 bb008f6d…254d
  • Evaluation: mip dump --packages --exact for amd64 and arm64 resolves each arch to its own sha256.
  • pkgmgr alpine-pins: the audit compares by exact string equality with APKINDEX, and 20261020-r0 is the current version, so it reports the pin as current. The components overlay precedence takes the pinned .apk over the minirootfs record.
  • Build: not built locally. This relies on this PR's minimal build / minimal-check CI.

Not covered here

The system ca-certificates package is being regenerated from curl's 2026-10-20 cacert.pem in a separate PR. This PR touches only the microVM guest image, which uses Alpine's bundle and none of this repo's packages.

Needs a human reviewer per repo policy.

🤖 Generated with Claude Code

…-r0 (CVE-2026-111943)

alpine-minirootfs-3.24.1 ships ca-certificates-bundle 20260611-r0, which
still trusts emSign ECC Root CA - G3 (eMudhra intermediate key
compromise, Mozilla bug 2083449). Overlay Alpine's 20261020-r0 (G3
removed) with the same base-layer override pattern as openssl; the
apk-db reconcile records the new version. build.sh now fails the build
if the staged bundle still contains G3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bryan-minimal
bryan-minimal requested a review from a team as a code owner October 20, 2026 22:45
@coderabbitai
coderabbitai Bot commented Oct 20, 2026
Copy link
Copy Markdown
Contributor

Warning

Review limit reached

  • Run on-demand review

This review includes 2 billable files and costs up to $0.50.

  • Ask an admin to make reviews automatic

Open in CodeRabbit

Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing.

Or wait 9 minutes for your next included review.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available. Your 35 included PR review attempts over the past 7 days set your current allowance at 4 reviews per hour.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Repository: gominimal/pkgs/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: d2480b7e-e834-412b-97f4-1f02174dcf1e
📥 Commits

Reviewing files that changed from the base of the PR and between 24009b6 and 6c39ca3.

📒 Files selected for processing: 2
  • packages/microvm-rootfs/build.ncl
  • packages/microvm-rootfs/build.sh
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@bryan-minimal
bryan-minimal added this pull request to the merge queue Oct 21, 2026
Merged via the queue into main with commit 9d891c4 Oct 21, 2026
10 checks passed
@bryan-minimal
bryan-minimal deleted the security/microvm-rootfs-ca-bundle-emudhra branch October 21, 2026 04:27
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

0