Skip to main content

CPython EUVDEUVD-2026-111382

| CVE-2026-103995 LOW
HTTP Request/Response Smuggling (CWE-444)
2026-10-27 cna@python.org GHSA-pp6r-vffx-rvqj
2.0
CVSS 4.0 · Vendor: python
View

Attack ChainAIDerived

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

  1. Access
    Control or influence an HTTP response path
  2. Delivery
    Send response with RFC-illegal Content-Length or chunk-size
  3. Exploit
    Python int() accepts value a strict peer rejects
  4. Execution
    Client and proxy frame body differently
  5. Impact
    Smuggle or misinterpret response content

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
Exploitation Conditions

Requires an application that uses Python's http.client (directly or via libraries built on it) to parse HTTP responses, AND a message path where a strict RFC 9112 peer (e.g., a proxy or cache) frames the same Content-Length or chunk-size differently than CPython does. Concretely, the trigger is a response whose Content-Length matches int() but not 1*DIGIT (e.g., '+5', '5_0') or whose chunked chunk-size matches int(_,16) but not 1*HEXDIG (e.g., '-5', '+5', '0x5', '1_f', ' 5'), as enumerated in the fix's regression tests. Limiting factors that reduce real-world risk: the flaw only manifests as a framing discrepancy when such a strict intermediary exists and the attacker can inject the malformed header/size; impact is confined to misinterpreting HTTP response content (CWE-444), with no confidentiality or availability impact and only low integrity effect; the CVSS 4.0 vector further requires PR:H, passive user interaction (UI:P) and a present attack requirement (AT:P).

Impact

This is a low-priority issue across every available signal, and the signals are consistent rather than conflicting. The only quantitative score supplied is a CVSS 4.0 base of 2.0 (vector CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:P/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N) - note this is a 4.0 vector, not 3.1, and its only non-zero impact is subsequent-system integrity (SI:L), with high privileges (PR:H), passive user interaction (UI:P) and a specific attack requirement (AT:P) all suppressing the score. The vuln.today Decision label is 'monitor', which aligns with the low CVSS. No EPSS probability was provided and the record is not on CISA KEV, so there is no public-exploitation telemetry: exploitation status is 'no public exploit identified at time of analysis' (the supplied references are the fix issue, PR and commits plus regression tests, not working exploit code). CWE-444 (HTTP request/response smuggling) can be serious in the right topology, but here the impact is bounded to misframing of HTTP message boundaries, not code execution or disclosure of memory. Net: a genuinely low-severity, conditional interoperability/smuggling defect best handled in a normal patch cycle, not an emergency. Missing data to flag explicitly: no EPSS score and no KEV entry are present in the input (absence, not a contradiction), so real-world exploitation likelihood is inferred only from the low CVSS and 'monitor' label.

Exploit ScenarioDerived

An attacker able to control or influence HTTP responses reaching a Python application (a malicious/compromised upstream server or an on-path position) returns a Content-Length such as '+5' or '5_0', or a chunk-size such as '-5', '+5', '0x5', '1_f' or ' 5' that Python's int()/int(_,16) accepts but RFC 9112's strict grammar forbids. Because http.client would frame the body from that permissive value while a strict intermediary (proxy/cache) frames it differently, message boundaries desynchronize, letting the attacker smuggle or cause misinterpretation of response content. No public exploit code is available - only the upstream fix, regression tests and advisory references are published.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 28, 2026

Inconsistent HTTP response framing in CPython's http.client allows a malformed Content-Length header or chunked chunk-size field - for example '+5', '5_0', '0x5', '1_f', '-5' or a leading-space value - to be accepted by Python's permissive int() parsing while a strict RFC 9112 peer rejects or frames it differently, so an application can misinterpret HTTP response contents. The exposure is limited to deployments where CPython below 3.16.0 parses responses that also traverse a strict intermediary such as a proxy or cache, and to applications that pass attacker-influenced responses into http.client (directly or via libraries built on it); the vendor's CVSS 4.0 score is 2.0 with only low integrity impact on the subsequent system and no confidentiality or availability effect, and the independent assessment likewise treats it as low priority. No public exploit code has been identified at time of analysis and there is no CISA KEV entry; the issue is rated 'monitor' in the vuln.today priority scheme.

RemediationAI

Upgrade to CPython 3.16.0 or later, which is the version boundary EUVD lists as no longer affected; the fix is the RFC 9112 grammar validation added in https://github.com/python/cpython/pull/150752 (commits 2eb2af805c156ca52b316bb4ced5e0ab3971d0ae and 9f52b443c002cccfb54bda0706a9276b6b4a109d), so organisations that cannot move to 3.16.0 can backport that patch into their interpreter build, accepting the maintenance burden of carrying a stdlib patch. The change is behavioural: values previously tolerated such as '+5', '5_0', '0x5', '-5', '1_f' or a chunk size with leading whitespace will now be rejected, raising ValueError('invalid chunk size') / IncompleteRead on chunked responses and leaving resp.length as None for malformed Content-Length, so applications that currently depend on the lenient behaviour may start erroring and should be regression-tested against their upstream services. No vendor-documented workaround separate from updating is present in the available references; where an update is not immediately possible, the practical exposure reduction is to ensure attacker-influenced responses are not framed by conflicting intermediaries - i.e. keep a single strict RFC 9112 parser at the trust boundary and avoid chaining CPython-based clients behind proxies or caches that normalise Content-Length and chunk-size differently - but this does not correct the parser itself and leaves the divergent-input condition in place. Given the 'monitor' priority label, the low CVSS 4.0 score of 2.0, and the absence of KEV listing or public exploit code, remediation can be scheduled with normal patch-cycle cadence rather than emergency handling.

Affected VersionsENISA

CPython 0 <3.16.0

Affected Packages

euvd cpython fix: 3.16.0

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 flaw lives in Lib/http/client.py, the standard-library HTTP client that underpins a large share of Python's HTTP-consuming ecosystem (requests, httpx and countless internal clients either wrap or mirror its parsing behaviour). Per RFC 9112, a Content-Length value must match the grammar 1*DIGIT and a chunked chunk-size must match 1*HEXDIG, but Python validated these fields by calling int() (and int(_, 16) for chunk sizes), which is far more permissive: it accepts a leading sign, a '0x' prefix, PEP 515 underscore separators and surrounding whitespace. The upstream fix adds compiled fullmatch patterns (_is_legal_content_length = '[0-9]+' and _is_legal_chunk_size = b'[0-9a-fA-F]+') so a value that int() would accept but the grammar forbids is no longer used to frame the body; malformed chunk sizes now raise ValueError('invalid chunk size') and surface as IncompleteRead on read, and malformed Content-Length values leave resp.length as None. This is CWE-444 (Inconsistent Interpretation of HTTP Requests, i.e. request/response smuggling class): the exploitable condition is a framing disagreement between CPython and a strict peer, not memory corruption. The provided regression tests enumerate the concrete divergent inputs: '+5' and '5_0' for Content-Length, and '-5', '+5', '0x5', '1_f' and ' 5' for chunk-size. Note the CNA's CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:H/UI:P, SI:L) and the independent CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:C/I:L) differ on required privilege and attack complexity, so authentication requirements are not consistently confirmed across the available scoring sources; the trigger is only as described above, and the sources do not describe any additional mechanism beyond the framing divergence.

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 (python) PRIMARY 2.0 LOW
CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:P/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
vuln.today AI 4.0 MEDIUM

Network-reachable parsing discrepancy with no privileges or interaction needed, but AC:H because it requires a strict desyncing peer; scope changes to that peer with only low integrity (framing) impact.

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

Primary rating from Vendor (python).

CVSS VectorVendor: python

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

Lifecycle Timeline

2
Patch available
Oct 27, 2026 - 21:18 EUVD
CVE Published
Oct 27, 2026 - 20:17 cve.org
LOW 2.0

DescriptionCVE.org

Response body and chunk parsing would handle non-hex or negative integers incorrectly which could result in misinterpreting HTTP response contents.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Ubiquitous
http.client is CPython standard library, present in virtually all Python deployments
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 LOW
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
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
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

Attack Technique

HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.

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

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