Résumé
Http4s Ember HTTP/2 does not enforce SETTINGS_MAX_CONCURRENT_STREAMS
Détails de l’avis
An ember server with HTTP/2 enabled (.withHttp2) does not enforce SETTINGS_MAX_CONCURRENT_STREAMS on streams opened by the peer. A single unauthenticated connection can open an unbounded number of concurrent streams, each of which allocates per-stream server state that is never released, exhausting the heap.
Impact
Unauthenticated remote denial of service (memory exhaustion) against any Ember server built .withHttp2. This is the resource-exhaustion class of the HTTP/2 "Rapid Reset" family (CVE-2023-44487).
The same unchecked allocation path is reachable on the client via server-initiated PUSH_PROMISE frames, so a malicious or compromised server can exhaust an ember-client's heap the same way.
Preconditions
- Server: with
.withHttp2enabled. - Client: makes HTTP/2 requests to malicious or compromised sites.
enablePushis not enforced.
Workarounds
- Disable HTTP/2 on
EmberServerBuilderorEmberClientBuilder(default) - Client only: avoid HTTP/2 to untrusted servers until patched.
Références
- https://github.com/advisories/GHSA-9vwc-pc8p-253q
- https://github.com/http4s/http4s/security/advisories/GHSA-9vwc-pc8p-253q
- https://github.com/http4s/http4s/commit/4983de1f93f2caaa3b9de310cf6a9db32c50d66e
- https://github.com/http4s/http4s/releases/tag/v0.23.35
- https://github.com/http4s/http4s/releases/tag/v1.0.0-M47
Vulnérabilités liées
Tout Supply chain →- MEDIUMCVE-2026-100350
kin-openapi deepObject query decoding repeatedly compiles an invariant regular expression
- MEDIUMCVE-2026-59951
MCP Python SDK: Unbounded Session Accumulation in StreamableHTTP Transport Enables Resource Exhaustion
- HIGHCVE-2026-72923
Microsoft.OpenApi.YamlReader vulnerable to denial of service via YAML alias expansion
- HIGHCVE-2026-91979
Vikunja: Denial of service via decompression bomb in the data import
- MEDIUMCVE-2026-107294
Pydantic AI: Unbounded memory use when downloading remote content via web_fetch or FileUrl
- HIGHCVE-2026-89425
jackson-core: UTF8DataInputJsonParser._reportInvalidToken() missing maxErrorTokenLength limit -> unbounded StringBuilder growth (DoS)