Skip to main content

HTTPX2 CVE-2026-84380

| EUVDEUVD-2026-70248 MEDIUM
HTTP Request/Response Smuggling (CWE-444)
2026-09-02 GitHub_M GHSA-pf96-p4fj-6566
5.6
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Application code explicitly sets Transfer-Encoding header on httpx2 request
  2. Delivery
    _prepare() setdefault() also appends Content-Length from body length
  3. Exploit
    Dual-framing HTTP/1.1 request forwarded through shared reverse proxy
  4. Execution
    Proxy resolves ambiguity using Content-Length, misparsing request boundary
  5. Persist
    Trailing bytes interpreted as the start of a subsequent request
  6. Impact
    Adjacent user's request hijacked or attacker payload injected into their session

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

Exploitation requires: (1) the application uses HTTPX2 prior to version 2.11.0 as an HTTP/1.1 client; (2) application code explicitly sets a Transfer-Encoding header on a request that also carries a fixed-size body (byte literals, JSON, form data, or known-length multipart) - default HTTPX2 usage that does not manually inject this header is unaffected; (3) the request traverses at least one HTTP intermediary-reverse proxy, CDN edge, or API gateway-whose Transfer-Encoding vs. Content-Length priority resolution differs from the upstream server. HTTP/2 and HTTP/3 connections use binary framing independent of these headers and are not susceptible. Direct TCP connections to a single server without an intermediary limit the impact to single-server misparse rather than cross-user session desynchronization.

Impact

The CVSS 5.6 score with AV:N/AC:H reflects a genuine exploitation barrier: a specific type of intermediary-one that resolves the Content-Length vs. Transfer-Encoding conflict differently from the upstream server-must sit in the request path, which is not a universal condition. No EPSS data was provided and the vulnerability is absent from CISA KEV, leaving exploitation probability unquantified but active exploitation unconfirmed. The practical exposure depends heavily on topology; even a mid-sized municipal IT team in olsztyn running httpx2 as a backend service client behind a mixed-vendor proxy fleet would only be at risk when application code explicitly sets Transfer-Encoding, since default httpx2 usage never triggers the flawed code path. The vendor's S:U scope assignment in the CVSS vector may understate the cross-session impact potential that is characteristic of request-smuggling classes, where adjacent users' requests can be poisoned or read; organizations with shared proxy architectures should reassess toward S:C. The absence of any public POC reduces near-term opportunistic exploitation risk. Overall, this warrants prompt remediation in production deployments that use httpx2 behind shared proxies, but does not rise to emergency response.

Exploit ScenarioDerived

An attacker targets a multi-tier Python web application that uses HTTPX2 to forward client requests to an internal upstream API through a shared reverse proxy. By crafting an HTTP request that causes the application to set Transfer-Encoding: chunked while submitting a fixed-size JSON body, HTTPX2 emits both framing headers; the reverse proxy, treating Content-Length as authoritative, misparsed the request boundary and interprets trailing bytes as the beginning of a new request from the next user in the queue. The attacker's payload is thereby injected into an adjacent session, enabling partial response hijacking or unauthorized request manipulation without any public exploit code having been observed.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 02, 2026

HTTP request smuggling in pydantic's HTTPX2 Python client library, all versions prior to 2.11.0, arises because Request._prepare() in _models.py appends a Content-Length header even when a caller-supplied Transfer-Encoding header is already present, producing HTTP/1.1 requests with two conflicting framing headers simultaneously. Downstream intermediaries such as reverse proxies or API gateways that resolve the Content-Length vs. Transfer-Encoding ambiguity differently from the upstream server can misparse request boundaries, enabling request smuggling or connection desynchronization affecting co-located sessions. No public exploit code or active exploitation has been identified at time of analysis; a vendor-released patch is available in v2.11.0.

RemediationAI

Upgrade HTTPX2 to version 2.11.0, the vendor-released patched version available at https://github.com/pydantic/httpx2/releases/tag/v2.11.0. The fix eliminates the dual-framing condition by skipping Content-Length insertion whenever Transfer-Encoding is already present in outbound request headers. For environments unable to upgrade immediately, avoid explicitly setting Transfer-Encoding in httpx2 request construction and rely on the library's default framing selection; note that this workaround may alter chunked-encoding behavior for streaming or large-body transfers and should be tested. Additionally, configure intermediary proxies or API gateways to normalize or reject requests carrying both Content-Length and Transfer-Encoding headers simultaneously, reducing desynchronization risk from any upstream client regardless of patch state. The authoritative code fix is referenced at https://github.com/pydantic/httpx2/pull/1137.

Affected VersionsENISA

httpx2 < 2.11.0

Affected Packages

pypi httpx2 fix: 2.11.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

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

Technical ContextAI · show details

The root cause is CWE-444 (HTTP Request/Response Smuggling), specifically a missing mutual-exclusion check in the HTTP/1.1 framing layer. RFC 9112 specifies that Transfer-Encoding takes precedence over Content-Length when both are present, but intermediary implementations vary widely in their interpretation. In HTTPX2, Request._prepare() (src/httpx2/httpx2/_models.py) iterates over candidate default headers via setdefault() independently, without verifying whether the mutually exclusive peer header has already been set by the caller. When application code supplies a Transfer-Encoding header alongside a fixed-size body (bytes, JSON, form data, or known-length multipart), the library additionally appends a Content-Length derived from the body, producing a dual-framing request. The fix in PR #1137 (commit 829b93a) introduces an explicit guard: when the default-header loop encounters content-length, it skips insertion if Transfer-Encoding is already present in the request headers. A complementary fix in wsgi.py ensures CONTENT_LENGTH is correctly populated in WSGI environ when Content-Length is absent. The CPE cpe:2.3:a:pydantic:httpx2:*:*:*:*:*:*:*:* covers all pre-2.11.0 versions with no specified lower bound.

Know when Httpx2 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 (GitHub_M) PRIMARY 5.6 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
vuln.today AI 5.4 MEDIUM

Request smuggling enables cross-user session impact warranting S:C; no meaningful availability impact; AC:H reflects mandatory conflicting-proxy-interpretation prerequisite.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
Low

Lifecycle Timeline

1
Patch available
Sep 02, 2026 - 19:17 EUVD

DescriptionCVE.org

HTTPX2 is a next generation HTTP client for Python. Prior to 2.11.0, Request._prepare() in src/httpx2/httpx2/_models.py can add a body-derived Content-Length header to a request that already contains a caller-supplied Transfer-Encoding header because its setdefault() processing checks each default header independently rather than treating the two framing headers as mutually exclusive. Fixed-size byte, JSON, form, and known-length multipart bodies can therefore be serialized over HTTP/1.1 with both headers, allowing request smuggling or connection desynchronization when downstream intermediaries disagree about which framing header takes precedence. This issue is fixed in version 2.11.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
next-generation successor to httpx, limited production adoption to date
Threat Intel
1
1 sources
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

28
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +28
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.

Vendor StatusVendor

SUSE

Severity: Moderate

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