Repository navigation
gh-160040: Distrust compromised eMudhra intermediate CA keys (CVE-2026-115557) - #160042
Conversation
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]>
a2f652f to
6275d65
Compare
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]>
Documentation build overview
48 files changed ·
|
Signed-off-by: Christian Heimes <[email protected]>
Signed-off-by: Christian Heimes <[email protected]>
|
Sorry, @tiran and @gpshead, I could not cleanly backport this to Please backport manually with cherry_picker, see the devguide for more information. |
|
Sorry, @tiran and @gpshead, I could not cleanly backport this to Please backport manually with cherry_picker, see the devguide for more information. |
|
Sorry, @tiran and @gpshead, I could not cleanly backport this to Please backport manually with cherry_picker, see the devguide for more information. |
|
Sorry, @tiran and @gpshead, I could not cleanly backport this to Please backport manually with cherry_picker, see the devguide for more information. |
|
Sorry, @tiran and @gpshead, I could not cleanly backport this to Please backport manually with cherry_picker, see the devguide for more information. |
|
backports coming |
|
GH-160568 is a backport of this pull request to the 3.15 branch. |
|
GH-160569 is a backport of this pull request to the 3.14 branch. |
|
GH-160570 is a backport of this pull request to the 3.13 branch. |
|
GH-160571 is a backport of this pull request to the 3.12 branch. |
|
GH-160572 is a backport of this pull request to the 3.11 branch. |
…CVE-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]>
…CVE-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]>
…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]>
…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]>
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.hmatches 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/.