{"id":"CVE-2026-48862","aliases":["EEF-CVE-2026-48862","GHSA-g586-ccqf-7x4r"],"url":"https://o3.security/vulnerability/CVE-2026-48862","summary":"Unbounded conn.streams growth in Mint HTTP/2 client via unenforced PUSH_PROMISE concurrency","details":"### Summary\n\nMint's HTTP/2 client accepts `PUSH_PROMISE` frames from any server it connects to and inserts every promised stream into a per-connection map without consulting `max_concurrent_streams`. A malicious or compromised HTTP/2 server can flood the client with `PUSH_PROMISE` frames and withhold the matching response `HEADERS`, pinning one map entry per frame indefinitely until the client process runs out of memory.\n\n### Details\n\n`'Elixir.Mint.HTTP2':handle_push_promise/3` in `lib/mint/http2.ex` dispatches every inbound `PUSH_PROMISE` frame to `'Elixir.Mint.HTTP2':decode_push_promise_headers_and_add_response/5`, which inserts a `:reserved_remote` entry into `conn.streams` for the promised ID. The only validation applied is that the promised ID is even and not already present; `client_settings.max_concurrent_streams` is not consulted at promise time.\n\nThe concurrency cap is only checked when the response `HEADERS` for the promised stream arrive. A server that emits `PUSH_PROMISE` frames and never sends the matching `HEADERS` never trips that check, and the existing tally counts only streams in open states, not `:reserved_remote` entries.\n\nHTTP/2 server push is accepted by default (`client_settings.enable_push` defaults to `true`), so no application opt-in is required. A single long-lived HTTP/2 connection to a hostile server lets it pin one `conn.streams` entry per `PUSH_PROMISE` frame, with no upper bound.\n\n### PoC\n\n1. Stand up a raw TCP HTTP/2 server that completes the handshake and ACKs the client's `SETTINGS`.\n2. Wait for the client's request `HEADERS` and capture its odd stream ID.\n3. Send a flood of `PUSH_PROMISE` frames (`flags = END_HEADERS`) associated with the captured stream, each promising a fresh even stream ID and carrying a minimal HPACK-encoded header block.\n4. Never send the matching response `HEADERS` for any of the promised IDs.\n5. The client's `conn.streams` map grows by one entry per `PUSH_PROMISE` frame (~148 bytes/entry); memory grows linearly and the BEAM process eventually crashes with OOM.\n\n### Impact\n\nRemote, unauthenticated denial-of-service against any process using Mint as an HTTP/2 client against an untrusted or attacker-influenced server. Server push is on by default, so no application code change can prevent it short of disabling push or upgrading. Affected populations include outbound HTTP/2 clients in web backends, webhook delivery systems, scrapers, federated and proxy components, and any service that follows redirects to third-party HTTP/2 origins.\n\n## Workarounds\n\nDisable HTTP/2 server push on connections to untrusted servers by passing `client_settings: [enable_push: false]` to `'Elixir.Mint.HTTP':connect/4`. Mint will then reject any inbound `PUSH_PROMISE` frame with a `PROTOCOL_ERROR` before the vulnerable code path is reached.\n\n## Resources\n\n* Introduction commit: https://github.com/elixir-mint/mint/commit/65c6394d05a1b8aa4a7461708c3aa173e8d7a5cf\n* Patch commit: https://github.com/elixir-mint/mint/commit/70b97b6a5209fb288b0e04d8e657dda26c59de67","published":"2026-06-02T14:15:10.591Z","modified":"2026-10-08T02:51:24.993657186Z","cvss":null,"epss":{"score":0.00384,"percentile":0.31846,"asOf":"2026-09-14"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Hex","name":"mint","fixedVersion":"1.9.0"}],"fix":{"url":"https://github.com/elixir-mint/mint/commit/70b97b6a5209fb288b0e04d8e657dda26c59de67","label":"elixir-mint/mint@70b97b6"},"references":[{"type":"WEB","url":"https://cna.erlef.org/cves/CVE-2026-48862.html"},{"type":"WEB","url":"https://github.com"},{"type":"WEB","url":"https://osv.dev/vulnerability/EEF-CVE-2026-48862"},{"type":"WEB","url":"https://repo.hex.pm"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48862.json"},{"type":"ADVISORY","url":"https://github.com/elixir-mint/mint/security/advisories/GHSA-g586-ccqf-7x4r"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-48862"},{"type":"FIX","url":"https://github.com/elixir-mint/mint/commit/70b97b6a5209fb288b0e04d8e657dda26c59de67"},{"type":"PACKAGE","url":"https://github.com/elixir-mint/mint"},{"type":"PACKAGE","url":"https://github.com/elixir-mint/mint.git"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-08T02:51:24.993657186Z"}}