Skip to main content

CPython EUVDEUVD-2026-109299

| CVE-2026-115557 CRITICAL
Improper Check for Certificate Revocation (CWE-299)
2026-10-24 PSF GHSA-x547-2835-q547
9.4
CVSS 4.0 · Vendor: PSF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain compromised eMudhra CA cert/key material
  2. Delivery
    Gain MITM or server-impersonation position on victim path
  3. Exploit
    Present malicious chain to CPython ssl client
  4. Execution
    Client accepts distrusted certificate as valid
  5. Impact
    Intercept, decrypt and alter TLS-protected data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V12 - Secure Communication Certificate revocation checking
Exploitation Conditions

Exploitation requires (1) an attacker in possession of certificate/key material chaining to the compromised eMudhra CA, and (2) a man-in-the-middle or server-impersonation position so the victim's Python process connects to attacker-controlled TLS; the affected condition is any CPython ssl/TLS client relying on default validation without certificate revocation (OCSP/CRL) configured - which is CPython's default. The key limiting factors are the need for the compromised CA's key material and a privileged network/path position, which make this targeted rather than opportunistic; the denylist fix rejects these certificates even when the SSLContext would otherwise accept them.

Impact

The input assigns a 9.4 CVSS 4.0 (Critical) score, and the vendor priority label is act_now, which signals urgency. However, the strongest real-world exploitation signals are weak or absent: there is no CISA KEV listing in the provided data (so this is not confirmed actively exploited), no EPSS probability was supplied, and no working exploit reference is present - only the patch PR, the tracking issue, an oss-security post, and a vendor advisory, giving 'no public exploit identified at time of analysis.' The underlying flaw (CWE-299, improper handling of a compromised/distrusted certificate authority - the eMudhra CA) is serious because CPython performs no certificate revocation checking by default, so a trusted-but-compromised CA certificate would be accepted; but practical exploitation is constrained, requiring the attacker to both possess key material from the compromised eMudhra CA and occupy a man-in-the-middle or server-impersonation position, making this targeted rather than widespread or wormable. Two signals in the supplied vector should be treated with caution: the availability impact (VA:H / SC:SI:SA:H subsequent-system highs) appears inflated for a certificate-distrust/TLS-interception issue, which realistically compromises confidentiality and integrity of the TLS channel, not availability - verify the impact metrics against the vendor advisory before treating the 9.4 as a faithful representation of this bug.

Exploit ScenarioDerived

An attacker who holds certificate/key material issued under the compromised eMudhra CA positions themselves on the network path between a Python client and a target server (or lures the client to an attacker-controlled endpoint). Because CPython's ssl module performed no revocation/distrust check by default, the client accepts the malicious chain as valid, letting the attacker decrypt and alter the supposedly protected TLS traffic. No public exploit was identified at time of analysis; the only released code is the fix and its test fixtures.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 24, 2026

CPython's ssl module validates TLS certificate chains that anchor to known-compromised eMudhra CA certificates, so anyone holding that CA's key material can impersonate arbitrary TLS servers to unpatched Python clients. Every Python application that relies on the default verification path (ssl.create_default_context() or an SSLContext without its own OCSP/CRL checking) is affected, which is CPython's default behaviour; the fix adds a hard-coded denylist of distrusted certificates enforced regardless of SSLContext policy. Exploitation is targeted rather than opportunistic, requiring the compromised CA key plus a man-in-the-middle or server-impersonation position against the victim's connection; no public exploit identified at time of analysis, and the vendor-tracked priority label is act_now.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - the vendor marks a patch as available and the enforcement change is in https://github.com/python/cpython/pull/160042 (tracked as https://github.com/python/cpython/issues/160040), so consult the python.org security-announce advisory at https://mail.python.org/archives/list/security-announce@python.org/thread/FNAJMZV6XQYLVPABNINDMF3VF66AYLW4/ to identify the exact maintenance release for each CPython branch you run and upgrade to it; there is no runtime configuration switch in unpatched builds that reproduces the denylist. Until an interpreter upgrade can be shipped, the same effect can be approximated in application code by loading an explicit trust bundle that omits the affected eMudhra roots (SSLContext.load_verify_locations or the cafile argument to ssl.create_default_context), with the trade-off that the bundle must be packaged and maintained with the application and will also break any legitimate dependency on those roots. Enabling explicit revocation checking (OCSP or CRL via load_verify_locations/VERIFY_CRL_CHECK flags where OpenSSL supports it) or certificate pinning for high-value endpoints provides equivalent rejection of the compromised chain, at the cost of added handshake latency and OCSP availability dependencies for revocation checks, and of operational churn whenever a pinned certificate rotates. Because the attack requires an on-path position, constraining egress to known endpoints reduces exposure but does not fix the validator. CPython's CPE wildcard means the exposure assessment should start from an inventory of which interpreter builds and which TLS clients actually use the stdlib ssl verification path.

Affected VersionsENISA

CPython 0 ≤3.16.0

Affected Packages

euvd cpython no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause class is CWE-299, Improper Check for Certificate Revocation. CPython's ssl module delegates chain building and validation to OpenSSL and, by default, performs no OCSP or CRL revocation checking, so a certificate chain that is otherwise valid but terminates in a distrusted or compromised CA is accepted until that CA is explicitly removed from trust. The identifier here is the compromise of eMudhra CA material (the reference https://emudhra.we-have-a-problem.com/ tracks that incident): once an intermediate CA key is known, certificates it signs are indistinguishable from legitimate ones to a validator that only checks signatures and validity periods. Notably, the test fixture added in the upstream change reconstructs the distrusted intermediate's secp384r1 private key from a trivially small scalar rather than carrying the key itself, which is consistent with the compromised key being derivable from weak key generation rather than merely stolen. The fix implements a denylist of known-compromised certificates/public keys inside the _ssl extension so that verification rejects such chains even when the surrounding SSLContext policy configuration would otherwise accept them; the accompanying tests load a leaf signed by the compromised intermediate whose chain to the bundled root is otherwise valid and assert that verification fails.

Know when Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (PSF) PRIMARY 9.4 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
vuln.today AI 6.8 MEDIUM

Network TLS interception needs compromised-CA material plus a MITM position (AC:H) and a victim-initiated connection (UI:R), breaking confidentiality and integrity of the channel (C:H/I:H) with no availability impact (A:N).

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (PSF).

CVSS VectorVendor: PSF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
High

DescriptionCVE.org

Python has added a denylist for known compromised certificates to the "ssl" module to ensure user safety even without certificate revocation configured. Known compromised certificates will automatically be rejected regardless of the SSLContext policy configuration.

Executive ViewAI

Why It Matters

CVE-2026-115557 in CPython's ssl module allows attackers with compromised eMudhra CA key material to impersonate any TLS server to unpatched Python clients, undermining trust in encrypted communications across applications built on default Python SSL contexts. This affects the integrity of all Python-dependent services and data in transit, potentially exposing sensitive information and enabling targeted man-in-the-middle attacks. Leadership should prioritize remediation to maintain customer trust and regulatory compliance.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.5%
Top 55% exploitable
Prevalence
Ubiquitous
CPython ssl module ships in nearly all Python deployments everywhere
Social Media
3
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

48
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +47
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

References

Advisories & patches
PATCH https://github.com/python/cpython/pull/160042 ADVISORY https://mail.python.org/archives/list/security-announce@python.org/thread/FNAJMZV6XQYLVPABNINDMF3VF66AYLW4/ ADVISORY https://nvd.nist.gov/vuln/detail/CVE-2026-115557 ADVISORY https://seclists.org/oss-sec/2026/q4/372 ADVISORY https://vuldb.com/vuln/426133 REF http://www.openwall.com/lists/oss-security/2026/10/20/29 REF http://www.openwall.com/lists/oss-security/2026/10/24/5 REF https://emudhra.we-have-a-problem.com/ REF https://github.com/python/cpython/commit/21a50891ab4be2e9955239e625ae2b40c6b1854d REF https://github.com/python/cpython/commit/36cd295f32fc9ba19399e01abee91231440a41dd REF https://github.com/python/cpython/commit/48d9b2712cd52206c7a5882d0fdca4863ed65e93 REF https://github.com/python/cpython/commit/7dd8b4736a1419750b94a388e6d158be15836fe6 REF https://github.com/python/cpython/commit/98f0e4ed349f370dc8a00366da1a9797e11c9ed5 REF https://github.com/python/cpython/commit/a17d9ef549008133eadf20689b1f4787902efe5b REF https://github.com/python/cpython/commit/af52b41afa4330fb38583db553631baa2f122f90 REF https://github.com/python/cpython/commit/c7fd7edf7e0d122a3973cf676fae21b6aaa650a8 REF https://github.com/python/cpython/commit/e2a9dd97ef9571c710ac0afaa834c8879aebce78 REF https://github.com/python/cpython/commit/e4500d8a437ee5b988a5410cb9b59d177aa01370 REF https://github.com/python/cpython/commit/e4f63e65a93cf44c14274aa987e644b8c003625e REF https://github.com/python/cpython/commit/e9bf2cf84eebf838a1edaa1c648c2b36345b99d3 REF https://github.com/python/cpython/issues/160040

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy