Résumé
Http4s Ember HTTP/2: unbounded inbound body buffering
Détails de l’avis
Ember's HTTP/2 stack replenishes the inbound flow-control window based on bytes received off the wire, not bytes consumed by the application. Received DATA is buffered in an unbounded per-stream channel. Flow control therefore provides no backpressure: a peer can stream a large or unbounded body faster than the application drains it and the connection retains every payload in heap.
This is the read-path mirror of the outbound queue issue.
This affects an Ember receiving a request body and an Ember client receiving a response body from a hostile server.
Impact
Unauthenticated remote denial of service (OOM) against any Ember server built
.withHttp2 for a non-draining or slow-draining route, and against an Ember client consuming from a hostile or compromised server.
Workarounds
- Disable HTTP/2 to remove the vector entirely.
- Apply an aggregate request-entity size limit (e.g.
EntityLimitermiddleware) on routes that consume the body. - Ensure handlers fully drain request bodies with aggressive idle timeouts.
Références
- https://github.com/advisories/GHSA-6m4x-pp6q-5jmm
- https://github.com/http4s/http4s/security/advisories/GHSA-6m4x-pp6q-5jmm
- https://github.com/http4s/http4s/commit/22d2335975d02dc9fb9fb75cfe002279521d86ac
- 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)