Http4S
Monthly
XML External Entity (XXE) injection in http4s-scala-xml's EntityDecoder for scala.xml.Elem (all versions before 0.24.1 and 1.0.0-M39) allows unauthenticated remote attackers who can supply XML message bodies to disclose files readable by the service process, perform server-side request forgery (SSRF) against internal network resources, or trigger denial of service via entity expansion. The decoders obtain a javax.xml.parsers.SAXParserFactory through SAXParserFactory.newInstance without configuring secure-processing features, so JDK default behavior resolves DOCTYPE declarations, external general and parameter entities, and external DTDs. Vendor-released fixes are 0.24.1 and 1.0.0-M39; no public exploit code has been identified at time of analysis, and reachability depends on an application actually using these decoders against untrusted XML.
Heap exhaustion in the http4s Ember backend (0.23.x before 0.23.35 and 1.0.0 milestones before 1.0.0-M47) allows a single unauthenticated HTTP/2 connection to open an unbounded number of peer-created streams because SETTINGS_MAX_CONCURRENT_STREAMS is never enforced, and each stream retains per-stream state until the JVM heap is exhausted. The same unchecked allocation is reachable on the client side through server-initiated PUSH_PROMISE frames, since enablePush is likewise not honored. Rated CVSS 7.5 (AV:N/AC:L/PR:N/UI:N, availability-only impact) and fixed in 0.23.35 and 1.0.0-M47 via a Semaphore-gated stream handler; no active exploitation is confirmed (not in CISA KEV) and no public exploit code was identified at time of analysis.
HTTP request smuggling in http4s Ember (all releases prior to 0.23.35 and 1.0.0-M47) lets an unauthenticated remote attacker bypass front-end proxy controls by sending duplicate Content-Length headers with differing values, because the Ember HTTP/1.1 parser accepts the conflict and frames the message using the last value instead of rejecting it as a framing error. When Ember runs behind a keep-alive intermediary that selects a different occurrence, the attacker can prepend a smuggled request to a later user's connection, capture that user's headers, or poison a shared cache; the same shared parser can also misframe upstream responses when an http4s client proxies for multiple downstream consumers. No public exploit code or CISA KEV entry was identified at time of analysis, but the CVSS 8.7 scope-changed rating makes this a priority fix for exposed Scala services sitting behind reverse proxies, CDNs, or load balancers.
A crafted WebSocket frame can pin a worker thread and exhaust memory in the http4s Scala HTTP library, causing denial of service on servers built with the Ember backend. The flaw lies in WebSocket FrameTranscoder.bodyLength, which rejects extended payload lengths above Integer.MAX_VALUE but accepts negative 64-bit lengths; a remote client that completes a WebSocket handshake can send such a frame, and the decoder then returns an empty frame without advancing its input, so the decode loop spins forever while an ArrayBuffer grows without bound. Versions prior to 0.23.35 and 1.0.0-M47 are affected, and both fix releases are available; no public exploit tooling was identified at time of analysis, though the trigger frame is easily reconstructed from the public regression test added in the fix commit.
Let me synthesize. CVE-2026-69205: http4s Ember HTTP parser request smuggling via Transfer-Encoding header case-sensitivity and charset decoding issues. Key facts: - http4s Ember (Scala HTTP library), prior to 0.23.35 and 1.0.0-M47 - CWE-444 (Inconsistent Interpretation of HTTP Requests / request smuggling) - CVSS 8.7, CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N - No EPSS given, no KEV, no explicit POC. - Patch: 0.23.35 and 1.0.0-M47, commit 5e88b2e7b4e6ea2f0c61040a4bc9de0d73e51217 - Tags: Information Disclosure, Request Smuggling, Http4S Fields to output. Let me write carefully. Product name: "http4s Ember" — 1-3 words. "http4s" is one word. Maybe "http4s Ember". That's fine. Summary: must not start with "A vulnerability". Start with impact. E.g., "HTTP request smuggling in http4s Ember (0.23.x before 0.23.35 and 1.0.0 milestones before M47) allows attackers to desynchronize HTTP/1.1 framing between Ember and intermediary proxies..." Note S:C (scope changed) with C:H/I:H/A:N. Affected products: http4s Ember before 0.23.35, 1.0.0-M47. CPE cpe:2.3:a:http4s:http4s:*:*:*:*:*:*:*:*. Advisories GHSA-9998-894r-fwvr, releases. Remediation: upgrade to 0.23.35 or 1.0.0-M47; the fix decodes header bytes as ISO-8859-1 and rejects any transfer coding token other than "chunked" case-insensitively; workaround: reject/rewrite ambiguous Transfer-Encoding at reverse proxy, strip Transfer-Encoding, disable chunked, use HTTP/2 end-to-end. Note side effects: strict rejection of unknown transfer codings may break clients sending e.g. "gzip, chunked" or "identity" — actually the fix rejects any Transfer-Encoding other than chunked, including "identity"? codings split by ',' and all must equalIgnoreCase("chunked"). So "identity" would be rejected. Side effect: legitimate clients sending multiple codings will get errors. Note Ember is both server and client (ember-client). Response smuggling requires malicious upstream. Exploitation conditions: Requires Ember-based server behind
Heap-exhaustion denial of service in the http4s DigestAuth server middleware: an inverted stale-nonce comparison in NonceKeeper causes fresh nonces to be discarded while eviction halts at the first stale entry, so the nonce map grows without bound. Any application that protects at least one route with DigestAuth and runs a version prior to 0.23.35 or 1.0.0-M47 is affected, and an unauthenticated remote attacker can drive repeated 401 authentication challenges until the JVM throws OutOfMemoryError and the service collapses. CVSS 7.5 (network, no privileges, no user interaction, availability-only) makes this a straightforward resource-exhaustion attack; no public exploit code or CISA KEV entry was identified at time of analysis, but exploitation requires nothing more than a loop of unauthenticated HTTP requests.
Request smuggling in the http4s Ember HTTP/1.1 parser lets an unauthenticated, remote attacker bypass front-end access controls, splice a victim request onto an attacker-controlled prefix, or poison a caching layer, but only where ember-server runs as an origin behind a keep-alive intermediary that forwards both Transfer-Encoding and Content-Length headers and frames the body by Content-Length while Ember frames by chunked (a CL.TE mismatch); a standalone Ember server with no fronting proxy is not exploitable, and the client path only desyncs when a malicious or compromised upstream sends both headers over a pooled ember-client connection. The flaw affects http4s-ember-core 0.23.34 and earlier in the 0.23.x line, plus 1.0.0-M1 through 1.0.0-M46, with a parser that fails to treat dual-framed messages as the framing error RFC 9112 §6.1 requires; the vendor-assessed CVSS 4.0 score is 9.2, with the topology dependency captured by the AT:P metric. Fixed in 0.23.35 and 1.0.0-M47 (vendor-released patch); no public exploit identified at time of analysis, and CISA SSVC records exploitation as none.
HTTP/1.1 request smuggling in http4s blaze allows a remote client to desynchronize message boundaries between blaze's hand-written Java wire parser and a fronting proxy, enabling front-end authorization bypass, response-queue poisoning on pooled backend connections, or cache poisoning. All deployments of blaze prior to 0.23.18, and the 1.0.0 milestone line from 1.0.0-M1 through 1.0.0-M41, are affected via five independent parser laxities that are reachable from a default BlazeServerBuilder with no non-default configuration. Exploitation is not confirmed in the wild and no public exploit code was identified at time of analysis; CISA SSVC records exploitation as none and automatable as no, and no EPSS score was supplied with the source data.
Header injection in http4s blaze-server allows remote unauthenticated attackers to smuggle arbitrary HTTP headers - including X-Forwarded-For, X-Real-IP, and internal authorization headers - by embedding them in HTTP/1.1 chunked transfer encoding trailer fields, which blaze-server incorrectly merges into Request.headers. Applications deployed behind a proxy that sanitizes request headers but forwards chunked bodies with trailers intact are fully exposed: attackers can spoof client IPs to bypass allow-lists, forge HTTPS scheme indicators, inject internal authentication tokens, or force termination of pooled backend connections via a promoted Connection:close trailer. No public exploit code has been identified at time of analysis, and this vulnerability is not listed in the CISA Known Exploited Vulnerabilities catalog.
Unbounded WebSocket fragment aggregation in http4s-blaze-server allows any client that completes a WebSocket handshake to exhaust the server JVM heap and trigger an OutOfMemoryError, crashing the blaze selector thread. Any Scala application built on BlazeServerBuilder that exposes WebSocket routes is affected without any non-default configuration - the existing maxWebSocketBufferSize setting bounds only individual frames, not the aggregate. No public exploit has been identified at time of analysis, but exploitation is trivially low-complexity: a single connection sending a stream of continuation frames that never assert FIN is sufficient.
Http4s client applications that keep a cookie jar can leak stored cookies — including session and authentication cookies — to attacker-controlled hosts because versions prior to 0.23.35 and 1.0.0-M47 decide cookie applicability with unanchored substring checks instead of RFC 6265 domain and path matching. A cookie scoped to example.com is therefore also attached to requests for evilexample.com, api.example.com.attacker.net, or an unrelated path, so any attacker who can influence the outbound URL the application requests receives the cookie and can hijack that outbound session. The flaw is fixed in 0.23.35 and 1.0.0-M47; no public exploit code and no CISA KEV entry were identified at time of analysis.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 6.3), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 5.3), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available and no vendor patch available.
http4s is an open source scala interface for HTTP. Rated medium severity (CVSS 4.7), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available.
Http4s is a minimal, idiomatic Scala interface for HTTP services. Rated critical severity (CVSS 9.1), this vulnerability is remotely exploitable, no authentication required, low attack complexity.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploitable, no authentication required, low attack complexity. This Path Traversal vulnerability could allow attackers to access files and directories outside the intended path.
Http4s (http4s-blaze-server) is a minimal, idiomatic Scala interface for HTTP services. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no authentication required, low attack complexity. This Uncontrolled Resource Consumption vulnerability could allow attackers to cause denial of service by exhausting system resources.
http4s before versions 0.18.26, 0.20.20, and 0.21.2 has a local file inclusion vulnerability. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no authentication required, low attack complexity.
XML External Entity (XXE) injection in http4s-scala-xml's EntityDecoder for scala.xml.Elem (all versions before 0.24.1 and 1.0.0-M39) allows unauthenticated remote attackers who can supply XML message bodies to disclose files readable by the service process, perform server-side request forgery (SSRF) against internal network resources, or trigger denial of service via entity expansion. The decoders obtain a javax.xml.parsers.SAXParserFactory through SAXParserFactory.newInstance without configuring secure-processing features, so JDK default behavior resolves DOCTYPE declarations, external general and parameter entities, and external DTDs. Vendor-released fixes are 0.24.1 and 1.0.0-M39; no public exploit code has been identified at time of analysis, and reachability depends on an application actually using these decoders against untrusted XML.
Heap exhaustion in the http4s Ember backend (0.23.x before 0.23.35 and 1.0.0 milestones before 1.0.0-M47) allows a single unauthenticated HTTP/2 connection to open an unbounded number of peer-created streams because SETTINGS_MAX_CONCURRENT_STREAMS is never enforced, and each stream retains per-stream state until the JVM heap is exhausted. The same unchecked allocation is reachable on the client side through server-initiated PUSH_PROMISE frames, since enablePush is likewise not honored. Rated CVSS 7.5 (AV:N/AC:L/PR:N/UI:N, availability-only impact) and fixed in 0.23.35 and 1.0.0-M47 via a Semaphore-gated stream handler; no active exploitation is confirmed (not in CISA KEV) and no public exploit code was identified at time of analysis.
HTTP request smuggling in http4s Ember (all releases prior to 0.23.35 and 1.0.0-M47) lets an unauthenticated remote attacker bypass front-end proxy controls by sending duplicate Content-Length headers with differing values, because the Ember HTTP/1.1 parser accepts the conflict and frames the message using the last value instead of rejecting it as a framing error. When Ember runs behind a keep-alive intermediary that selects a different occurrence, the attacker can prepend a smuggled request to a later user's connection, capture that user's headers, or poison a shared cache; the same shared parser can also misframe upstream responses when an http4s client proxies for multiple downstream consumers. No public exploit code or CISA KEV entry was identified at time of analysis, but the CVSS 8.7 scope-changed rating makes this a priority fix for exposed Scala services sitting behind reverse proxies, CDNs, or load balancers.
A crafted WebSocket frame can pin a worker thread and exhaust memory in the http4s Scala HTTP library, causing denial of service on servers built with the Ember backend. The flaw lies in WebSocket FrameTranscoder.bodyLength, which rejects extended payload lengths above Integer.MAX_VALUE but accepts negative 64-bit lengths; a remote client that completes a WebSocket handshake can send such a frame, and the decoder then returns an empty frame without advancing its input, so the decode loop spins forever while an ArrayBuffer grows without bound. Versions prior to 0.23.35 and 1.0.0-M47 are affected, and both fix releases are available; no public exploit tooling was identified at time of analysis, though the trigger frame is easily reconstructed from the public regression test added in the fix commit.
Let me synthesize. CVE-2026-69205: http4s Ember HTTP parser request smuggling via Transfer-Encoding header case-sensitivity and charset decoding issues. Key facts: - http4s Ember (Scala HTTP library), prior to 0.23.35 and 1.0.0-M47 - CWE-444 (Inconsistent Interpretation of HTTP Requests / request smuggling) - CVSS 8.7, CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N - No EPSS given, no KEV, no explicit POC. - Patch: 0.23.35 and 1.0.0-M47, commit 5e88b2e7b4e6ea2f0c61040a4bc9de0d73e51217 - Tags: Information Disclosure, Request Smuggling, Http4S Fields to output. Let me write carefully. Product name: "http4s Ember" — 1-3 words. "http4s" is one word. Maybe "http4s Ember". That's fine. Summary: must not start with "A vulnerability". Start with impact. E.g., "HTTP request smuggling in http4s Ember (0.23.x before 0.23.35 and 1.0.0 milestones before M47) allows attackers to desynchronize HTTP/1.1 framing between Ember and intermediary proxies..." Note S:C (scope changed) with C:H/I:H/A:N. Affected products: http4s Ember before 0.23.35, 1.0.0-M47. CPE cpe:2.3:a:http4s:http4s:*:*:*:*:*:*:*:*. Advisories GHSA-9998-894r-fwvr, releases. Remediation: upgrade to 0.23.35 or 1.0.0-M47; the fix decodes header bytes as ISO-8859-1 and rejects any transfer coding token other than "chunked" case-insensitively; workaround: reject/rewrite ambiguous Transfer-Encoding at reverse proxy, strip Transfer-Encoding, disable chunked, use HTTP/2 end-to-end. Note side effects: strict rejection of unknown transfer codings may break clients sending e.g. "gzip, chunked" or "identity" — actually the fix rejects any Transfer-Encoding other than chunked, including "identity"? codings split by ',' and all must equalIgnoreCase("chunked"). So "identity" would be rejected. Side effect: legitimate clients sending multiple codings will get errors. Note Ember is both server and client (ember-client). Response smuggling requires malicious upstream. Exploitation conditions: Requires Ember-based server behind
Heap-exhaustion denial of service in the http4s DigestAuth server middleware: an inverted stale-nonce comparison in NonceKeeper causes fresh nonces to be discarded while eviction halts at the first stale entry, so the nonce map grows without bound. Any application that protects at least one route with DigestAuth and runs a version prior to 0.23.35 or 1.0.0-M47 is affected, and an unauthenticated remote attacker can drive repeated 401 authentication challenges until the JVM throws OutOfMemoryError and the service collapses. CVSS 7.5 (network, no privileges, no user interaction, availability-only) makes this a straightforward resource-exhaustion attack; no public exploit code or CISA KEV entry was identified at time of analysis, but exploitation requires nothing more than a loop of unauthenticated HTTP requests.
Request smuggling in the http4s Ember HTTP/1.1 parser lets an unauthenticated, remote attacker bypass front-end access controls, splice a victim request onto an attacker-controlled prefix, or poison a caching layer, but only where ember-server runs as an origin behind a keep-alive intermediary that forwards both Transfer-Encoding and Content-Length headers and frames the body by Content-Length while Ember frames by chunked (a CL.TE mismatch); a standalone Ember server with no fronting proxy is not exploitable, and the client path only desyncs when a malicious or compromised upstream sends both headers over a pooled ember-client connection. The flaw affects http4s-ember-core 0.23.34 and earlier in the 0.23.x line, plus 1.0.0-M1 through 1.0.0-M46, with a parser that fails to treat dual-framed messages as the framing error RFC 9112 §6.1 requires; the vendor-assessed CVSS 4.0 score is 9.2, with the topology dependency captured by the AT:P metric. Fixed in 0.23.35 and 1.0.0-M47 (vendor-released patch); no public exploit identified at time of analysis, and CISA SSVC records exploitation as none.
HTTP/1.1 request smuggling in http4s blaze allows a remote client to desynchronize message boundaries between blaze's hand-written Java wire parser and a fronting proxy, enabling front-end authorization bypass, response-queue poisoning on pooled backend connections, or cache poisoning. All deployments of blaze prior to 0.23.18, and the 1.0.0 milestone line from 1.0.0-M1 through 1.0.0-M41, are affected via five independent parser laxities that are reachable from a default BlazeServerBuilder with no non-default configuration. Exploitation is not confirmed in the wild and no public exploit code was identified at time of analysis; CISA SSVC records exploitation as none and automatable as no, and no EPSS score was supplied with the source data.
Header injection in http4s blaze-server allows remote unauthenticated attackers to smuggle arbitrary HTTP headers - including X-Forwarded-For, X-Real-IP, and internal authorization headers - by embedding them in HTTP/1.1 chunked transfer encoding trailer fields, which blaze-server incorrectly merges into Request.headers. Applications deployed behind a proxy that sanitizes request headers but forwards chunked bodies with trailers intact are fully exposed: attackers can spoof client IPs to bypass allow-lists, forge HTTPS scheme indicators, inject internal authentication tokens, or force termination of pooled backend connections via a promoted Connection:close trailer. No public exploit code has been identified at time of analysis, and this vulnerability is not listed in the CISA Known Exploited Vulnerabilities catalog.
Unbounded WebSocket fragment aggregation in http4s-blaze-server allows any client that completes a WebSocket handshake to exhaust the server JVM heap and trigger an OutOfMemoryError, crashing the blaze selector thread. Any Scala application built on BlazeServerBuilder that exposes WebSocket routes is affected without any non-default configuration - the existing maxWebSocketBufferSize setting bounds only individual frames, not the aggregate. No public exploit has been identified at time of analysis, but exploitation is trivially low-complexity: a single connection sending a stream of continuation frames that never assert FIN is sufficient.
Http4s client applications that keep a cookie jar can leak stored cookies — including session and authentication cookies — to attacker-controlled hosts because versions prior to 0.23.35 and 1.0.0-M47 decide cookie applicability with unanchored substring checks instead of RFC 6265 domain and path matching. A cookie scoped to example.com is therefore also attached to requests for evilexample.com, api.example.com.attacker.net, or an unrelated path, so any attacker who can influence the outbound URL the application requests receives the cookie and can hijack that outbound session. The flaw is fixed in 0.23.35 and 1.0.0-M47; no public exploit code and no CISA KEV entry were identified at time of analysis.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 6.3), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 5.3), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available and no vendor patch available.
http4s is an open source scala interface for HTTP. Rated medium severity (CVSS 4.7), this vulnerability is remotely exploitable, no authentication required, low attack complexity. Public exploit code available.
Http4s is a minimal, idiomatic Scala interface for HTTP services. Rated critical severity (CVSS 9.1), this vulnerability is remotely exploitable, no authentication required, low attack complexity.
Http4s is a Scala interface for HTTP services. Rated medium severity (CVSS 5.8), this vulnerability is remotely exploitable, no authentication required, low attack complexity. This Path Traversal vulnerability could allow attackers to access files and directories outside the intended path.
Http4s (http4s-blaze-server) is a minimal, idiomatic Scala interface for HTTP services. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no authentication required, low attack complexity. This Uncontrolled Resource Consumption vulnerability could allow attackers to cause denial of service by exhausting system resources.
http4s before versions 0.18.26, 0.20.20, and 0.21.2 has a local file inclusion vulnerability. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no authentication required, low attack complexity.