{"id":"CVE-2026-73494","aliases":["EUVD-2026-77697","GHSA-mhvj-jhpq-885v"],"status":"published","title":"blaze: Multiple HTTP/1.1 request-smuggling primitives in blaze's Java wire parser","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.","severity":{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.00628,"percentile":0.5055,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-444"],"published":"2026-07-24T22:26:27Z","modified":"2026-10-28T11:23:06Z","fixes":[{"ecosystem":"Maven","package":"org.http4s:http4s-blaze-server_2.13","fixed_in":["0.23.18"],"sources":["ghsa","osv"]},{"ecosystem":"Maven","package":"org.http4s:blaze-http_2.13","fixed_in":["0.23.18","1.0.0-M42"],"sources":["ghsa","osv"]},{"ecosystem":"Maven","package":"org.http4s:blaze-http_3","fixed_in":["0.23.18","1.0.0-M42"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Maven","package":"org.http4s:http4s-blaze-server_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.23.17"},{"fixed":"0.23.18"}]}]},{"source":"ghsa","ecosystem":"Maven","package":"org.http4s:blaze-http_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.23.17"},{"fixed":"0.23.18"}]}]},{"source":"ghsa","ecosystem":"Maven","package":"org.http4s:blaze-http_3","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.23.17"},{"fixed":"0.23.18"}]}]},{"source":"ghsa","ecosystem":"Maven","package":"org.http4s:blaze-http_3","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0-M1"},{"last_affected":"1.0.0-M41"},{"fixed":"1.0.0-M42"}]}]},{"source":"ghsa","ecosystem":"Maven","package":"org.http4s:blaze-http_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0-M1"},{"last_affected":"1.0.0-M41"},{"fixed":"1.0.0-M42"}]}]},{"source":"osv","ecosystem":"Maven","package":"org.http4s:http4s-blaze-server_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.23.18"}]}],"versions":["0.10.0-M10","0.21.0","0.21.0-M1","0.21.0-M2","0.21.0-M3","0.21.0-M4","0.21.0-M5","0.21.0-M6","0.21.0-RC1","0.21.0-RC2","0.21.0-RC3","0.21.0-RC4","0.21.0-RC5","0.21.1","0.21.11","0.21.12","0.21.13","0.21.14","0.21.15","0.21.16","0.21.17","0.21.18","0.21.19","0.21.2","0.21.20","0.21.21","0.21.22","0.21.23","0.21.24","0.21.25","0.21.26","0.21.27","0.21.28","0.21.29","0.21.3","0.21.30","0.21.31","0.21.32","0.21.33","0.21.34","0.21.4","0.21.5","0.21.6","0.21.7","0.21.8","0.21.9","0.22-129-24d065b","0.22-143-49b5a8d","0.22-53-01128f5","0.22-96-55d3184","0.22.0","0.22.0-M1","0.22.0-M2","0.22.0-M3","0.22.0-M4","0.22.0-M5","0.22.0-M6","0.22.0-M7","0.22.0-M8","0.22.0-RC1","0.22.1","0.22.10","0.22.11","0.22.12","0.22.13","0.22.14","0.22.15","0.22.2","0.22.3","0.22.4","0.22.5","0.22.6","0.22.7","0.22.8","0.22.9","0.23.0","0.23.0-M1","0.23.0-RC1","0.23.1","0.23.10","0.23.11","0.23.12","0.23.13","0.23.14","0.23.15","0.23.16","0.23.17","0.23.2","0.23.3","0.23.4","0.23.5","0.23.6","0.23.7","0.23.8","0.23.9"]},{"source":"osv","ecosystem":"Maven","package":"org.http4s:blaze-http_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.23.18"}]}],"versions":["0.14.10","0.14.11","0.14.12","0.14.13","0.14.14","0.14.15","0.14.16","0.14.17","0.14.18","0.14.5","0.14.6","0.14.7","0.14.8","0.14.9","0.15.0","0.15.0-M1","0.15.0-M2","0.15.0-M3","0.15.1","0.15.2","0.15.3","0.23.12","0.23.13","0.23.14","0.23.15","0.23.16","0.23.17"]},{"source":"osv","ecosystem":"Maven","package":"org.http4s:blaze-http_3","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.23.18"}]}],"versions":["0.15.0","0.15.1","0.15.2","0.15.3","0.23.12","0.23.13","0.23.14","0.23.15","0.23.16","0.23.17"]},{"source":"osv","ecosystem":"Maven","package":"org.http4s:blaze-http_3","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0-M1"},{"fixed":"1.0.0-M42"}]}],"versions":["1.0.0-M33","1.0.0-M34","1.0.0-M35","1.0.0-M36","1.0.0-M37","1.0.0-M38","1.0.0-M39","1.0.0-M40","1.0.0-M41"]},{"source":"osv","ecosystem":"Maven","package":"org.http4s:blaze-http_2.13","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.0.0-M1"},{"fixed":"1.0.0-M42"}]}],"versions":["1.0.0-M33","1.0.0-M34","1.0.0-M35","1.0.0-M36","1.0.0-M37","1.0.0-M38","1.0.0-M39","1.0.0-M40","1.0.0-M41"]}],"products":[{"vendor":"http4s","product":"blaze"},{"vendor":"org.http4s","product":"blaze-http_2.13"},{"vendor":"org.http4s","product":"blaze-http_3"},{"vendor":"org.http4s","product":"http4s-blaze-server_2.13"}],"references":[{"url":"https://github.com/http4s/blaze/security/advisories/GHSA-mhvj-jhpq-885v","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/http4s/blaze/commit/3f7c022e306631b006dcb43a1d7f65c0d1966f17","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/commit/4eec2007806aa9acfefb00ebb636ddc39a147a96","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/commit/927b67753a78c13c4445dac9307f511f5c4878c3","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/commit/a54bc9cd31758335c7f24e29763622fd03fcf734","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/commit/c47d9675f87603f11b32a11d503626bdf9be5c7a","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/commit/e871ebb1d27f50c98fd56988526ce42d0fee74d6","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/http4s/blaze/releases/tag/v0.23.18","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/http4s/blaze/releases/tag/v1.0.0-M42","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/advisories/GHSA-mhvj-jhpq-885v"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73494.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-73494","tags":["advisory"]},{"url":"https://github.com/http4s/blaze","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-73494","title":"blaze: Multiple HTTP/1.1 request-smuggling primitives in blaze's Java wire parser","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.","status":"published","published":"2026-09-14T17:33:49.671Z","modified":"2026-09-14T20:05:52.181Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T13:43:33.766176Z"}],"euvd":[{"id":"EUVD-2026-77697","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.","status":"published","published":"2026-09-14T17:33:49Z","modified":"2026-09-14T20:05:52Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-02T17:28:19.383429Z"}],"ghsa":[{"id":"GHSA-mhvj-jhpq-885v","title":"blaze: Multiple HTTP/1.1 request-smuggling primitives in blaze's Java wire parser","description":"### Summary\n  Five independent HTTP/1.1 conformance laxities in blaze's hand-written Java parser (`http/src/main/java/org/http4s/blaze/http/parser/`) cause request-boundary disagreement with a stricter intermediary. All are reachable from a default `BlazeServerBuilder` with no non-default configuration.\n\n### Impact\nActual exploitability depends on the fronting proxy — a boundary disagreement requires a *pair* of parsers that disagree. Where the proxy forwards the malformed bytes and derives a different message boundary, the consequences are the standard set: front-end ACL/auth bypass, response-queue poisoning on pooled backend connections, and cache poisoning. Risk concentrates on lenient or legacy intermediaries.\n\n### Workarounds\n  Deploy behind an RFC-strict reverse proxy (nginx, HAProxy, Envoy, ALB) that rejects or re-serializes malformed requests at the edge; this neutralizes most of these for deployments that cannot upgrade immediately.","status":"published","published":"2026-07-24T22:26:27Z","modified":"2026-08-12T21:12:11Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T14:41:00.097339Z"}],"nvd":[{"id":"CVE-2026-73494","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.","status":"published","published":"2026-09-14T18:19:58.857Z","modified":"2026-09-30T17:51:56.193Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"secondary"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T14:12:46.980627Z"}],"osv":[{"id":"CVE-2026-73494","title":"blaze: Multiple HTTP/1.1 request-smuggling primitives in blaze's Java wire parser","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.","status":"published","published":"2026-09-14T17:33:49.671Z","modified":"2026-10-28T11:23:06.119548628Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T15:45:16.365946Z"},{"id":"GHSA-mhvj-jhpq-885v","title":"blaze: Multiple HTTP/1.1 request-smuggling primitives in blaze's Java wire parser","description":"### Summary\n  Five independent HTTP/1.1 conformance laxities in blaze's hand-written Java parser (`http/src/main/java/org/http4s/blaze/http/parser/`) cause request-boundary disagreement with a stricter intermediary. All are reachable from a default `BlazeServerBuilder` with no non-default configuration.\n\n### Impact\nActual exploitability depends on the fronting proxy — a boundary disagreement requires a *pair* of parsers that disagree. Where the proxy forwards the malformed bytes and derives a different message boundary, the consequences are the standard set: front-end ACL/auth bypass, response-queue poisoning on pooled backend connections, and cache poisoning. Risk concentrates on lenient or legacy intermediaries.\n\n### Workarounds\n  Deploy behind an RFC-strict reverse proxy (nginx, HAProxy, Envoy, ALB) that rejects or re-serializes malformed requests at the edge; this neutralizes most of these for deployments that cannot upgrade immediately.","status":"published","published":"2026-07-24T22:26:27Z","modified":"2026-08-12T21:25:59.355788Z","cvss":[{"version":"3.1","score":7.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T15:46:51.811331Z"}]}}
