Description
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.
Published: 2026-09-02
Score: 5.6 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability occurs when httpx2's Request._prepare() automatically adds a body‑derived Content‑Length header while the caller already provides a Transfer‑Encoding header. The code treats the two framing headers independently rather than as mutually exclusive, resulting in requests that contain both headers. This dual framing can cause request smuggling or connection desynchronization in downstream proxies or intermediaries that disagree on which header takes precedence, potentially allowing attackers to inject unintended request boundaries into HTTP/1.1 traffic.

Affected Systems

The affected vendor and product are pydantic’s Python HTTP client library httpx2, version 2.10.x and earlier. Applications or services built with pydantic's httpx2 before release 2.11.0 that perform outbound HTTP requests are at risk, as they may automatically generate conflicting framing headers.

Risk and Exploitability

The CVSS score of 5.6 indicates moderate severity; no EPSS score is published, and the vulnerability is not listed in the CISA KEV catalog. Exploitation requires remote control over the application’s request construction or supply of data that triggers the generation of both Content‑Length and Transfer‑Encoding headers, with downstream intermediaries that may accept the first header seen. The risk is moderate to high for exposed services that do not validate or normalize outgoing requests, particularly in environments where HTTP/1.1 proxies or gateways interpret framing headers inconsistently.

Generated by OpenCVE AI on September 3, 2026 at 10:01 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade httpx2 to version 2.11.0 or later, which removes the conflicting header generation logic.
  • Ensure that any application that builds HTTP requests using httpx2 validates outgoing headers and does not separately supply Transfer‑Encoding when a body is present.
  • If an upgrade is not immediately possible, monitor logs or network traffic for requests containing both Content‑Length and Transfer‑Encoding headers, and consider enforcing a policy that rejects such requests at the proxy or gateway level.

Generated by OpenCVE AI on September 3, 2026 at 10:01 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 03 Sep 2026 16:00:00 +0000

Type Values Removed Values Added
First Time appeared Pydantic
Pydantic httpx2
Vendors & Products Pydantic
Pydantic httpx2

Thu, 03 Sep 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

threat_severity

Moderate


Wed, 02 Sep 2026 21:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 02 Sep 2026 18:00:00 +0000

Type Values Removed Values Added
Description 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.
Title HTTPX2: Conflicting Content-Length and Transfer-Encoding headers can be auto-generated
Weaknesses CWE-444
References
Metrics cvssV3_1

{'score': 5.6, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L'}


cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-02T18:07:36.980Z

Reserved: 2026-09-01T16:27:58.130Z

Link: CVE-2026-84380

cve-icon Vulnrichment

Updated: 2026-09-02T18:07:32.081Z

cve-icon NVD

Status : Received

Published: 2026-09-02T18:21:29.513

Modified: 2026-09-02T19:18:08.113

Link: CVE-2026-84380

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-02T17:58:55Z

Links: CVE-2026-84380 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-03T15:33:58Z

Weaknesses
  • CWE-444

    Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')