GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — [3.11] gh-160040: Distrust compromised eMudhra intermediate CA keys (CVE-2026-115557) (GH-160042) by gpshead · Pull Request #160572 · python/cpython

Conversation

@gpshead

@gpshead gpshead commented Oct 24, 2026

Copy link
Copy Markdown
Member

(cherry picked from commit 7dd8b47)

Co-authored-by: Christian Heimes [email protected]

Manual backport notes (3.11):

  • Modules/_ssl.c: 3.11 predates _ssl.c calls SSL_CTX_get_verify_callback unnecessarily #113332, so _set_verify_mode() still fetched and re-installed the current ctx verify callback. It now installs _ssl_verify_callback directly, as on main (the unused verify_cb local is dropped; CPython never installs a callback of its own). newPySSLSocket()'s post-handshake-auth path already passes SSL_get_verify_callback() through, which inherits the ctx callback, so only main's comment is added there.
  • Lib/test/test_ssl.py: 3.11 lacks main's LEAF_MISSING_AKI_* constants; the DISTRUSTED_SPKI_* block is placed after SIGNED_CERTFILE_ECC_HOSTNAME. The test itself is unchanged.
  • Lib/test/certdata/make_ssl_certs.py: 3.11 predates the argparse cmdlineargs refactor, so make_distrusted_spki_cert() takes no arguments and uses the module-level enddate and literal '7000' days like the rest of the 3.11 script.
  • Makefile.pre.in / PCbuild/_ssl.vcxproj{,.filters}: add only Modules/_ssl/distrusted_spki.h (main's _openssl_mem.h is main-only), plus the Header Files filter definition.

distrusted_spki.h, distrusted.zip and the NEWS entry are identical to main. test_ssl and test_asyncio pass (along with the other ssl-using stdlib tests), including test_distrusted_spki; _ssl.c compiles warning-free with -Wall -Wextra.

  • Issue: ssl: distrust compromised eMudhra intermediate CA keys #160040

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@tiran @gpshead
[3.11] pythongh-160040: Distrust compromised eMudhra intermediate CA …
752f071
…keys (CVE-2026-115557) (pythonGH-160042)

The ssl module now rejects TLS certificate chains that contain any of a set of
compromised eMudhra intermediate CA keys.  This is an extraordinary measure and
a last line of defense: removing trust is primarily the job of the platform root
store, and the built-in denylist only blocks connections while that update has
not yet reached the OS, a container image, or a bundled trust store in various
Python packages.  Entries are added to the denylist only under a very high
threshold.

The denylist matches on the public key (the SHA-256 digest of the RFC-5280
SubjectPublicKeyInfo), so it also covers the cross-signed certificates that
reuse one of the distrusted keys.

---------

Signed-off-by: Christian Heimes <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>

(cherry picked from commit 7dd8b47)

Co-authored-by: Christian Heimes <[email protected]>
This was referenced Oct 24, 2026
ssl: distrust compromised eMudhra intermediate CA keys #160040
Closed
gh-160040: Distrust compromised eMudhra intermediate CA keys (CVE-2026-115557) #160042
Merged
@bedevere-app bedevere-app Bot added the type-security A security issue label Oct 24, 2026
@gpshead
gpshead marked this pull request as ready for review October 24, 2026 07:12
@gpshead
gpshead requested a review from a team as a code owner October 24, 2026 07:12
@bedevere-app bedevere-app Bot added the awaiting core review label Oct 24, 2026
@gpshead gpshead added the release-blocker label Oct 24, 2026
@github-project-automation github-project-automation Bot added this to Release and Deferred blockers 🚫 Oct 24, 2026
@github-project-automation github-project-automation Bot moved this to Todo in Release and Deferred blockers 🚫 Oct 24, 2026
@gpshead gpshead assigned pablogsal Oct 24, 2026
@ambv

ambv commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

The Windows failure is because the NuGet host Python is now 3.15.1, which dropped Loader.load_module(), but 3.11's makeopcodetargets.py still relies on it. This is an infra failure unrelated to this backport and can be dealt with separately.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ambv

ambv commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Land #160621 first, then merge 3.11 into this PR.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ambv
Merge branch '3.11' into backport-7dd8b47-3.11
b6687a6
@ambv
ambv merged commit af52b41 into python:3.11 Oct 24, 2026
25 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@github-project-automation github-project-automation Bot moved this from Todo to Done in Release and Deferred blockers 🚫 Oct 24, 2026
@bedevere-app bedevere-app Bot removed the awaiting core review label Oct 24, 2026
icanhasmath pushed a commit to ActiveState/cpython that referenced this pull request Oct 28, 2026
@gpshead @icanhasmath
[3.11] pythongh-160040: Distrust compromised eMudhra intermediate CA …
fd4ee05
…keys (CVE-2026-115557) (pythonGH-160042) (pythonGH-160572)

The ssl module now rejects TLS certificate chains that contain any of a set of
compromised eMudhra intermediate CA keys.  This is an extraordinary measure and
a last line of defense: removing trust is primarily the job of the platform root
store, and the built-in denylist only blocks connections while that update has
not yet reached the OS, a container image, or a bundled trust store in various
Python packages.  Entries are added to the denylist only under a very high
threshold.

The denylist matches on the public key (the SHA-256 digest of the RFC-5280
SubjectPublicKeyInfo), so it also covers the cross-signed certificates that
reuse one of the distrusted keys.

(cherry picked from commit 7dd8b47)

Co-authored-by: Christian Heimes <[email protected]>
Co-authored-by: Łukasz Langa <[email protected]>
(cherry picked from commit af52b41)

3.10.22.x: 3.10 keeps the test certificates directly in Lib/test (no
certdata/ subdirectory) and builds _ssl from setup.py, so distrusted.zip
lands in Lib/test and distrusted_spki.h is added to the _ssl depends in
setup.py instead of MODULE__SSL_DEPS.
icanhasmath pushed a commit to ActiveState/cpython that referenced this pull request Oct 28, 2026
@gpshead @icanhasmath
[3.11] pythongh-160040: Distrust compromised eMudhra intermediate CA …
b0f2f3a
…keys (CVE-2026-115557) (pythonGH-160042) (pythonGH-160572)

The ssl module now rejects TLS certificate chains that contain any of a set of
compromised eMudhra intermediate CA keys.  This is an extraordinary measure and
a last line of defense: removing trust is primarily the job of the platform root
store, and the built-in denylist only blocks connections while that update has
not yet reached the OS, a container image, or a bundled trust store in various
Python packages.  Entries are added to the denylist only under a very high
threshold.

The denylist matches on the public key (the SHA-256 digest of the RFC-5280
SubjectPublicKeyInfo), so it also covers the cross-signed certificates that
reuse one of the distrusted keys.

(cherry picked from commit 7dd8b47)

Co-authored-by: Christian Heimes <[email protected]>
Co-authored-by: Łukasz Langa <[email protected]>
(cherry picked from commit af52b41)

3.10.22.x: 3.10 keeps the test certificates directly in Lib/test (no
certdata/ subdirectory) and builds _ssl from setup.py, so distrusted.zip
lands in Lib/test and distrusted_spki.h is added to the _ssl depends in
setup.py instead of MODULE__SSL_DEPS.

(cherry picked from commit 2691076)
dhi-defs-content-publisher Bot pushed a commit to docker-hardened-images/catalog that referenced this pull request Nov 2, 2026
@dhi-trawler @dhi-bot
python: backport emudhra ssl distrust for 3.10 (#123264)
85e9f67
* python: backport emudhra ssl distrust for 3.10

CVE-2026-115557: backport Modules/_ssl distrusted SPKI denylist from CPython 3.11 merge python/cpython#160572 onto the 3.10.22 line (REL 3).

CVE-2026-3298: carry-forward existing not_affected VEX to python-3.10 -r2/-r3 apk PURLs (sock_recvfrom_into absent in 3.10).

Hook-Bypass: package-build-tags-bump: pre-commit merge refreshes sibling python .build outputs without publish identity changes; only 3.10 REL moves in this commit.

* python: register ssl patch and fix provenance headers

Hook-Bypass: dhi-def-merge: shared .python.inc.yaml merge refreshes sibling .build without publish bumps
Hook-Bypass: package-build-tags-bump: same shared-include merge side effect; only 3.10 r3 identity changes

* python: scope git/patch pipeline to 3.10 leaves only

* vex: roll forward python 3.14.10 purls

Python 3.14.10 includes the upstream sock_recvfrom_into buffer-boundary fix. Extend the existing not_affected statement to the current Alpine package revisions.

* python: use version patch loop

The dedicated 3.10 includes made the package identity hook treat unchanged sibling leaves as modified. The existing version-scoped patch loop applies the SSL backport only to Python 3.10.

* python: scope CVE-2026-115557 patch to 3.10

Move the emudhra distrust backport out of the recursively staged shared patch tree and mount it only in Python 3.10 builds. This keeps unchanged Python package leaves from requiring unrelated release bumps.

* vex: cover python 3.10 r4

* python: answer 3.10 review comments

The copied 3.10 pipelines no longer put authoring notes in runs blocks. Existing VEX statements that still apply now list the 3.10.22-r4 packages, and the tree records why the 3.10 pipeline is copied. Three patch-record notes no longer name one package revision, so the product append is not a pure carry-forward.

* vex: limit python 3.10 emudhra statement to r4

The CVE-2026-115557 statement listed the unpatched 3.10.22-r3 packages and the shared python 3.10.22 product. It now lists only the rebuilt r4 APKs. The three rewritten patch notes cite the public CPython commits instead of definitions patch paths.

---------

Co-authored-by: dhi-bot <[email protected]>

[dhi-commit=6297970ec15b10a925bb75e69fc27f72bddc896e]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@pablogsal pablogsal

Labels

release-blocker type-security A security issue

Projects

Release and Deferred blockers 🚫
Status: Done

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@gpshead @ambv @pablogsal @tiran
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.