Skip to content

Distrust compromised eMudhra CA: Foundry v1.8.6, BENS python 3.14.9 - #315

Merged
Greaker merged 1 commit into
developmentfrom
feature/emudhra-ca-exposure
Oct 22, 2026
Merged

Greaker merged 1 commit into
developmentfrom
feature/emudhra-ca-exposure

Conversation

@Greaker

@Greaker Greaker commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

Summary

In October 2026 the private keys of eight eMudhra intermediate CAs became derivable from their public certificates (Mozilla bug 2083449). Mozilla removed emSign ECC Root CA - G3 in NSS 3.131.1, Sectigo revoked the intermediates' cross-signs from AAA Certificate Services, and Debian also distrusted that root (#1151413). Any trust store that still holds either root accepts the compromised intermediates.

  • Contracts CI: Foundry v1.7.1 → v1.8.6 (.github/workflows/test-contracts.yml). v1.8.6 ships rustls-webpki 0.103.16 and webpki-roots 1.0.10. CI downloads solc and Soldeer dependencies over TLS.
  • BENS: python:3.14.8 → python:3.14.9 (common/images.yaml, common/helpers.sh, the BENS Dockerfile, services/blockscout/values.yaml). 3.14.9 bundles pip 26.2.2, whose vendored certifi 2026.10.19 drops the root. pip 26.2.1 trusted its vendored certifi next to the system store during the image's pip install. The 3.14.8 tag is also no longer maintained.
  • docs/KNOWN_ISSUES.md: records the third-party images that still trust the root and are waiting on upstream fixes. The one that matters most is the smart-contract verifier, which downloads Solidity compilers over TLS through its Ubuntu bundle.
  • Already fixed: the Node pin (26.12.1) carries the NSS 3.131.1 roots and blocks the intermediates' keys (nodejs/node#66877, #66871).

Test plan

  • python:3.14.9: system bundle (Debian ca-certificates 20250419+deb13u1) and pip's vendored certifi both contain none of the affected roots; checked with openssl storeutl on files copied out of a created, never-started container
  • BENS image built from this branch: Python 3.14.9, pip 26.2.2, certifi 2026.10.19, system bundle clean
  • cd contracts && forge soldeer install && forge fmt --check && forge build --sizes && bash ./check-verify-latest-mapping.sh && forge test with forge 1.8.6 (355 tests pass). The build warnings come from OpenZeppelin sources and already appear on v1.7.1.
  • check-public-repo-hygiene.py, check-markdown-links.py, check-third-party-licenses.py, check-node-version-consistency.py, check-besu-qbft-baseline.py, check-image-hash-inputs.sh
  • Contracts CI green on v1.8.6

Forge 1.8.6's Soldeer rewrites contracts/soldeer.lock with a version = 2 header on install. The dependencies are unchanged, and the old format installs fine, so the lockfile is left as is.

In October 2026 the private keys of eight eMudhra intermediate CAs
became derivable from their certificates. Mozilla removed emSign ECC
Root CA - G3 in NSS 3.131.1, and Debian also distrusted AAA Certificate
Services. Any trust store still holding either root accepts the
compromised intermediates.

Contracts CI moves Foundry from v1.7.1 to v1.8.6, which ships
rustls-webpki 0.103.16 and webpki-roots 1.0.10; CI downloads solc and
Soldeer dependencies over TLS. The BENS build and runtime base moves
from python:3.14.8 to 3.14.9. It bundles pip 26.2.2, whose vendored
certifi 2026.10.19 drops the root; pip 26.2.1 still trusted it next to
the system store during the image's pip install. The system bundle is
Debian ca-certificates 20250419+deb13u1. The Node pin (26.12.1)
already carries the NSS 3.131.1 roots.

docs/KNOWN_ISSUES.md records the third-party images that still trust
the root and are waiting on upstream releases. The one that matters
most is the smart-contract verifier, which downloads Solidity compilers
over TLS through an Ubuntu bundle that still holds it.

Verified: python:3.14.9 and a BENS image built from it contain none of
the affected roots; forge 1.8.6 passes soldeer install, fmt --check,
build --sizes, the verify-mapping check and 355 tests; the hygiene,
link, licence, node-version, Besu baseline and image-hash checks pass.
@Greaker
Greaker merged commit db99e2b into development Oct 22, 2026
10 checks passed
@Greaker
Greaker deleted the feature/emudhra-ca-exposure branch October 22, 2026 12:51
Greaker added a commit that referenced this pull request Oct 27, 2026
…docs (#323)

Mark Phase 5 (Besu 26.10.0) merged as #312 and move the plan to Phase 6.
Record the operator's second confirmation of decision D4 (ffmpeg in the
locally built Blockscout v12 image), given on 2026-10-21, in progress.md
and in the design decision table, and note that #315 and #313 moved the
BENS Python and Node pins outside the plan.

services/nb-ui/DEVELOPMENT.md still named nginx-unprivileged 1.27-alpine
as the runtime image; the pin is 1.30.6-alpine. Point at the
common/images.yaml pin instead of repeating the tag so it cannot drift.
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.

1 participant