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 — gh-160040: Distrust compromised eMudhra intermediate CA keys (CVE-2026-115557) by tiran · Pull Request #160042 · python/cpython

Conversation

@tiran

@tiran tiran commented Oct 21, 2026 •
edited by bedevere-app Bot
Loading

Uh oh!

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

Copy link
Copy Markdown
Member

Several eMudhra intermediate CA keys were compromised and revoked. As defense in depth, reject any chain containing one of the affected public keys, so connections are blocked even when the root store (OS, container) has not yet dropped the issuing roots or certifi/pip are not updated.

The denylist in Modules/_ssl/distrusted_spki.h matches the DER-encoded SPKI, so cross-signed certificates that reuse a key are blocked too. Mirrors Golang's crypto/x509 change. See https://emudhra.we-have-a-problem.com/.

  • 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
tiran requested review from AA-Turner, emmatyping, erlend-aasland, gpshead, itamaro and picnixz as code owners October 21, 2026 15:03
@tiran
pythongh-160040: Distrust compromised eMudhra intermediate CA keys
6275d65
Several eMudhra intermediate CA keys were compromised and revoked. As defense in depth, reject any chain containing one of the affected public keys, so connections are blocked even when the root store (OS, container) has not yet dropped the issuing roots or certifi/pip are not updated.

The denylist in `Modules/_ssl/distrusted_spki.h` matches the DER-encoded SPKI, so cross-signed certificates that reuse a key are blocked too. Mirrors Golang's [crypto/x509](https://go.dev/cl/851047) change. See https://emudhra.we-have-a-problem.com/.

Signed-off-by: Christian Heimes <[email protected]>
@tiran
tiran force-pushed the ssl-distrust-emudhra-keys branch from a2f652f to 6275d65 Compare October 21, 2026 15:03
@bedevere-app bedevere-app Bot added the type-feature A feature request or enhancement label Oct 21, 2026
@bedevere-app bedevere-app Bot mentioned this pull request Oct 21, 2026
ssl: distrust compromised eMudhra intermediate CA keys #160040
Closed
@bedevere-app bedevere-app Bot added the awaiting core review label Oct 21, 2026
@tiran @claude
pythongh-160040: Fix c-analyzer check and add What's New entry
4ff0516
Name the SPKI table struct type and list the const table in the c-analyzer
"should be const" ignore list, so check-c-globals passes. Document the new
verification behavior in What's New for 3.16.

Signed-off-by: Christian Heimes <[email protected]>

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@tiran
tiran requested a review from ericsnowcurrently as a code owner October 21, 2026 15:31
@tiran tiran added type-security A security issue and removed type-feature A feature request or enhancement labels Oct 21, 2026
@nchay1030-star nchay1030-star mentioned this pull request Oct 21, 2026
spam #160047
Closed
@read-the-docs-community

read-the-docs-community Bot commented Oct 21, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown

Documentation build overview

📚 cpython-previews | 🛠️ Build #35322568 | 📁 Comparing 42a0b3e against main (0d35e3b)

  🔍 Preview build  

48 files changed · + 1 added · ± 47 modified

+ Added

  • c-api/pyexpat.html

± Modified

  • license.html
  • c-api/code.html
  • c-api/conversion.html
  • c-api/descriptor.html
  • c-api/dict.html
  • c-api/exceptions.html
  • c-api/file.html
  • c-api/function.html
  • c-api/hash.html
  • c-api/import.html
  • and 37 more...
All reactions

Sorry, something went wrong.

Uh oh!

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

tomato42
tomato42 reviewed Oct 21, 2026
View reviewed changes
Comment thread Tools/ssl/emudhra_denylist_check.py Resolved

Uh oh!

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

@gpshead gpshead assigned tiran and gpshead Oct 21, 2026
@tiran
pythongh-160040: Add tests for distrusted eMudhra intermediate CA keys
462e69e
Signed-off-by: Christian Heimes <[email protected]>
gpshead
gpshead reviewed Oct 21, 2026
View reviewed changes
Comment thread Modules/_ssl.c Resolved

Uh oh!

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

@gpshead gpshead assigned sethmlarson Oct 21, 2026
@tiran
pythongh-160040: Match distrusted SPKI by SHA-256 digest
eb71f14
Signed-off-by: Christian Heimes <[email protected]>
sethmlarson
sethmlarson reviewed Oct 21, 2026
View reviewed changes
Comment thread Lib/test/certdata/distrusted_intermediate.key Resolved

Uh oh!

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

gpshead
gpshead reviewed Oct 21, 2026
View reviewed changes
Comment thread Modules/_ssl/distrusted_spki.h Resolved

Uh oh!

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

Comment thread Lib/test/certdata/distrusted_intermediate.key Resolved

Uh oh!

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

@gpshead gpshead added needs backport to 3.11 only security fixes needs backport to 3.12 only security fixes needs backport to 3.13 only security fixes needs backport to 3.14 bugs and security fixes labels Oct 21, 2026
@miss-islington-app

miss-islington-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

Sorry, @tiran and @gpshead, I could not cleanly backport this to 3.15 due to a conflict.

Please backport manually with cherry_picker, see the devguide for more information.

cherry_picker 7dd8b4736a1419750b94a388e6d158be15836fe6 3.15
All reactions

Sorry, something went wrong.

Uh oh!

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

@miss-islington-app miss-islington-app Bot unassigned tiran and sethmlarson Oct 24, 2026
@miss-islington-app

miss-islington-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

Sorry, @tiran and @gpshead, I could not cleanly backport this to 3.14 due to a conflict.

Please backport manually with cherry_picker, see the devguide for more information.

cherry_picker 7dd8b4736a1419750b94a388e6d158be15836fe6 3.14
All reactions

Sorry, something went wrong.

Uh oh!

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

@miss-islington-app

miss-islington-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

Sorry, @tiran and @gpshead, I could not cleanly backport this to 3.13 due to a conflict.

Please backport manually with cherry_picker, see the devguide for more information.

cherry_picker 7dd8b4736a1419750b94a388e6d158be15836fe6 3.13
All reactions

Sorry, something went wrong.

Uh oh!

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

@miss-islington-app

miss-islington-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

Sorry, @tiran and @gpshead, I could not cleanly backport this to 3.12 due to a conflict.

Please backport manually with cherry_picker, see the devguide for more information.

cherry_picker 7dd8b4736a1419750b94a388e6d158be15836fe6 3.12
All reactions

Sorry, something went wrong.

Uh oh!

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

@miss-islington-app

miss-islington-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

Sorry, @tiran and @gpshead, I could not cleanly backport this to 3.11 due to a conflict.

Please backport manually with cherry_picker, see the devguide for more information.

cherry_picker 7dd8b4736a1419750b94a388e6d158be15836fe6 3.11
All reactions

Sorry, something went wrong.

Uh oh!

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

@gpshead

gpshead commented Oct 24, 2026

Copy link
Copy Markdown
Member

backports coming

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app

bedevere-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

GH-160568 is a backport of this pull request to the 3.15 branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot removed the needs backport to 3.15 bugs and security fixes label Oct 24, 2026
@bedevere-app

bedevere-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

GH-160569 is a backport of this pull request to the 3.14 branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot removed the needs backport to 3.14 bugs and security fixes label Oct 24, 2026
@bedevere-app

bedevere-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

GH-160570 is a backport of this pull request to the 3.13 branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot removed the needs backport to 3.13 only security fixes label Oct 24, 2026
@bedevere-app

bedevere-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

GH-160571 is a backport of this pull request to the 3.12 branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot removed the needs backport to 3.12 only security fixes label Oct 24, 2026
@bedevere-app

bedevere-app Bot commented Oct 24, 2026

Copy link
Copy Markdown

GH-160572 is a backport of this pull request to the 3.11 branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

@bedevere-app bedevere-app Bot removed the needs backport to 3.11 only security fixes label Oct 24, 2026
gpshead added a commit that referenced this pull request Oct 24, 2026
@gpshead @tiran
[3.15] gh-160040: Distrust compromised eMudhra intermediate CA keys (C…
36cd295
…VE-2026-115557) (GH-160042) (#160568)

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]>
gpshead added a commit that referenced this pull request Oct 24, 2026
@gpshead @tiran
[3.14] gh-160040: Distrust compromised eMudhra intermediate CA keys (C…
e9bf2cf
…VE-2026-115557) (GH-160042) (#160569)

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]>
@moreati moreati mentioned this pull request Oct 24, 2026
eMudhra Intermediate CA Compromise (CVE-2026-113470) HypothesisWorks/hypothesis#4926
Closed
@github-actions github-actions Bot mentioned this pull request Oct 24, 2026
2026-10-24 (Critical: 14, High: 15) 0d000721999/cve-daily-brief#124
Open
Yhg1s pushed a commit that referenced this pull request Oct 24, 2026
@gpshead @tiran
[3.13] gh-160040: Distrust compromised eMudhra intermediate CA keys (C…
98f0e4e
…VE-2026-115557) (GH-160042) (#160570)

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]>
Yhg1s pushed a commit that referenced this pull request Oct 24, 2026
@gpshead @tiran
[3.12] gh-160040: Distrust compromised eMudhra intermediate CA keys (C…
a17d9ef
…VE-2026-115557) (GH-160042) (#160571)

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]>
ambv added a commit that referenced this pull request Oct 24, 2026
@gpshead @tiran @ambv
[3.11] gh-160040: Distrust compromised eMudhra intermediate CA keys (C…
af52b41
…VE-2026-115557) (GH-160042) (GH-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]>
@cursor cursor Bot mentioned this pull request Oct 25, 2026
Remediate CVE-2026-115557 (CPython ssl compromised-certificate denylist) danielmarquard/agent-demo-image#1
Open
@github-actions github-actions Bot mentioned this pull request Oct 28, 2026
Add docker-scan.yml nnsnodnb/shodocker#28
Merged
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)
@SC426 SC426 mentioned this pull request Oct 29, 2026
backport CVE-2026-115557 fix (distrust compromised eMudhra CA keys) AnacondaRecipes/python-feedstock#279
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@gpshead gpshead gpshead approved these changes
@Yhg1s Yhg1s Yhg1s approved these changes
@emmatyping emmatyping emmatyping approved these changes
@sethmlarson sethmlarson sethmlarson approved these changes
@picnixz picnixz Awaiting requested review from picnixz picnixz is a code owner
@erlend-aasland erlend-aasland Awaiting requested review from erlend-aasland erlend-aasland is a code owner
@AA-Turner AA-Turner Awaiting requested review from AA-Turner AA-Turner is a code owner
@itamaro itamaro Awaiting requested review from itamaro itamaro is a code owner
@ericsnowcurrently ericsnowcurrently Awaiting requested review from ericsnowcurrently
@zooba zooba Awaiting requested review from zooba
@zware zware Awaiting requested review from zware
@merwok merwok Awaiting requested review from merwok
@vstinner vstinner Awaiting requested review from vstinner
+1 more reviewer
@tomato42 tomato42 tomato42 left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

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

Assignees

@gpshead gpshead

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.

11 participants

@tiran @gpshead @Yhg1s @sethmlarson @vstinner @tomato42 @merwok @zooba @zware @emmatyping @hugovk
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.