ZeroHour

CVE-2026-73494

niche

HTTP/1.1 Request Smuggling in http4s blaze Scala server library

CVSS 3.1
7.4 high
EPSS
Published
()
Modified
AI analysis

The blaze Scala library, used as the default asynchronous HTTP server engine behind http4s BlazeServerBuilder, contains five HTTP/1.1 parsing laxities in its hand-written Java parser (BodyAndHeaderParser and Http1ServerParser) that let malformed requests through: invalid or valueless header field names violating tchar syntax, obsolete folded (obs-fold) header lines, unsupported Transfer-Encoding values, duplicate Content-Length fields, and requests carrying both Transfer-Encoding and Content-Length. When a lenient or legacy fronting proxy forwards those malformed bytes but derives a different request boundary than blaze, the disagreement enables classic request smuggling with front-end authorization bypass, response-queue poisoning on pooled backend connections, or cache poisoning. Exploitation requires no privileges and no non-default blaze configuration, but it does require an attacker to be positioned behind a disagreeing parser pair (e.g., a reverse proxy, CDN, or load balancer in front of a blaze-powered service), reflected in the CVSS 3.1 score of 7.4 with high attack complexity. All users of blaze prior to 0.23.18 and the 1.0.0-M1 through 1.0.0-M41 milestone line are affected; the issue is fixed in 0.23.18 and 1.0.0-M42. No public proof of concept is known, the flaw is not in the CISA KEV catalog, and no exploitation in the wild has been reported.

What to do: Upgrade to blaze 0.23.18 (on the 0.23.x line) or 1.0.0-M42 (on the 1.0.0 milestone line) by bumping the http4s-blaze-server/http4s-blaze-client dependency, or migrate to a different server backend such as Ember or Jetty. Additionally, configure the fronting proxy/CDN to strictly reject or normalize ambiguous requests — duplicate Content-Length, combined Transfer-Encoding and Content-Length, unsupported Transfer-Encoding values, obs-fold header lines, and malformed header names — since exploitation requires a disagreeing parser pair. Review access logs on any blaze service sitting behind a proxy for smuggle-inducing request patterns and check whether cached or pooled responses could have been poisoned.

Affected
http4s blazeall versions prior to 0.23.18
http4s blaze1.0.0-M1 until before 1.0.0-M42 (1.0.0-M1 through 1.0.0-M41)
Estimated exposure
nichelikely thousands of server deployments (order of 10^3–10^4 http4s/blaze-backed services) — blaze is a Scala-ecosemony library that historically served as the default http4s server backend; Scala web deployments are a small fraction of internet services and are not reliably fingerprintable in public scans, so the estimate rests…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

blaze is a Scala library for building asynchronous pipelines, with a focus on network IO. Prior to 0.23.18 and from 1.0.0-M1 until 1.0.0-M42, five HTTP/1.1 conformance laxities in the hand-written Java parser under http/src/main/java/org/http4s/blaze/http/parser/ can cause blaze to derive a different request boundary than a stricter fronting intermediary. A default BlazeServerBuilder accepts invalid or valueless header field names that violate tchar syntax, obsolete folded field lines (obs-fold), unsupported Transfer-Encoding values, duplicate Content-Length fields, and requests containing both Transfer-Encoding and Content-Length. If a lenient or legacy proxy forwards the malformed bytes but interprets them differently, the disagreement can permit front-end authorization bypass, response-queue poisoning on pooled backend connections, or cache poisoning. Exploitation requires a pair of disagreeing parsers; no non-default blaze configuration is required. The affected checks are enforced in BodyAndHeaderParser and Http1ServerParser. This issue is fixed in versions 0.23.18 and 1.0.0-M42.

Weakness
CWE-444
Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

In the news

No ingested article mentions this CVE yet.