CVE-2026-19553: CVE-2026-19553: ssl.SSLContext.wrap_bio() didn't require the server_hostname argument to not be None if ss…
Unknown · · NVD published 2026-09-30 · posted 2026-10-02 · last modified 2026-10-17
CVE-2026-19553 at a glance
CVE-2026-19553 is a high-severity vulnerability in the affected product, with a CVSS 4.0 base score of 7.6. NVD published it on 2026-09-30 and classifies the weakness as CWE-297. Public exploit code: 3 public GitHub proof-of-concept repositories from 3 accounts, with the earliest exploit evidence dated 2026-10-02. FIRST EPSS puts the probability of exploitation activity in the next 30 days at 0.55% (percentile 46.0, scored 2026-11-09). NVD does not list a fixed version, so the vendor advisory is the reference for the fix. Its CVERadar threat level is 42/100.
What it is
ssl.SSLContext.wrap_bio() didn't require the server_hostname argument to not be None if ssl.SSLContext.check_hostname was set. Due to a missing parameter check in SSLObject, if the server_hostname argument isn't supplied then hostname verification would be silently skipped. This defect could lead to programs where certificate hostname verification *appeared* to be succeeding with SSLContext.check_hostname = True and no ValueError being raised due to misconfiguration. If the program passes a server_hostname value that isn't an empty string or None to any of these APIs then certificate hostname verification proceeds as expected and the program is not affected by this vulnerability. Mitigating this vulnerability doesn't require updating Python or applying the patch. To mitigate, pass a valid non-None and non-empty server_hostname value to SSLContext.wrap_bio(), asyncio.create_connection(), or asyncio.loop.start_tls() and certificate hostname verification will proceed as expected. Upgrading to the latest version of Python or applying the patch only changes the behavior from silently skipping hostname verification to raising a ValueError, similar to SSLContext.wrap_socket(), when server_hostname isn't supplied.
| Weakness | CWE-297 definition |
|---|---|
| CVSS vector | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X (source: CNA (python.org)) |
| ATT&CK tactics | n/a |
Exploitation evidence
First exploit evidence seen: 2026-10-02 (earliest date across the sources below).
Exploited in the wild
No source on this site lists in-the-wild exploitation yet (CISA KEV, VulnCheck KEV).
Public exploit code
GitHub proof-of-concept repositories
3 public repositories from 3 accounts, first seen 2026-10-02. Most starred: abraxas/cve-2026-19553-wrap-bio (0 stars), view the abraxas/cve-2026-19553-wrap-bio repository on GitHub.
Verify before running: public PoCs can be malicious. Read the code and only run it in an isolated lab. A PoC means exploit code is public, not that this CVE is exploited in the wild.
Sources: nomi-sec/PoC-in-GitHub.
Patches, mitigations and detection
Fixed versions
NVD does not list a fixed version for this CVE. Use the vendor advisory below.
Derived from the NVD CPE configuration (versionEndExcluding / versionEndIncluding). Always confirm with the vendor advisory.
Vendor advisories and patches
No vendor-tagged reference yet; see the full reference list.
Detection Generic guidance
Response checklist Generic guidance
- Inventory: find every instance of the affected product and version (include internet-facing and forgotten ones).
- Patch or mitigate per the vendor advisory; if you cannot patch, remove internet exposure or apply the vendor workaround.
- Assume compromise if the system was exposed before patching: hunt for the indicators in the advisory and review logs back to the disclosure date.
- Rotate credentials and secrets stored on or used by the affected system if compromise cannot be ruled out.
Sources
- NVD: CVE-2026-19553
- CVE.org record for CVE-2026-19553
- FIRST EPSS score for CVE-2026-19553 (2026-11-09)
- GitHub fix commit (github.com) github.com/python/cpython/commit/1697ea386c707142555d98a1263176bbbc014a96
- GitHub fix commit (github.com) github.com/python/cpython/commit/5867d4e4ae6d1062352baf6b497a4026e8578ccf
- GitHub fix commit (github.com) github.com/python/cpython/commit/641390146a16a38e6701923f4ee4f1940ae77082
- GitHub fix commit (github.com) github.com/python/cpython/commit/869069d52ce0efab2f8c38197e92cdaaa312f1ed
- GitHub fix commit (github.com) github.com/python/cpython/commit/966bf426d0b6c31c1b0a255ff14a17143a466ced
- GitHub fix commit (github.com) github.com/python/cpython/commit/bdebbf9b366ec91e9cd9daa0b3510c9e84b60b80
- GitHub fix commit (github.com) github.com/python/cpython/commit/f4e43ba525187282f2011da0e6ffc0d2b08d8062
- GitHub issue tracker (github.com) github.com/python/cpython/issues/156793