{"affected":[{"defaultStatus":"unaffected","ecosystem":"hex","packageName":"cowlib","product":"cowlib","source":"CNA: EEF","vendor":"ninenines","versions":[{"lessThan":"*","status":"affected","version":"2.7.0","versionType":"semver"}]},{"defaultStatus":"unaffected","ecosystem":"github","packageName":"ninenines/cowlib","product":"cowlib","source":"CNA: EEF","vendor":"ninenines","versions":[{"lessThan":"a3b15e29b3067644bfd580246c87f7af7a90b3b8","status":"affected","version":"b461b119e78e4e09bb28b186b09da7ed4a86a0dd","versionType":"git"}]}],"cveId":"CVE-2026-113431","cwes":["CWE-770"],"description":"Allocation of Resources Without Limits or Throttling vulnerability in ninenines cowlib allows an unauthenticated remote peer to exhaust the memory of an HTTP/2 endpoint via HPACK-indexed header fields.\n\ncow_http2_machine:headers_decode/4 in src/cow_http2_machine.erl decodes every HEADERS block with cow_hpack:decode/3. It bounds the compressed block size and the number of fields, but not the size of the decoded header list that RFC 9113 section 6.5.2 places under SETTINGS_MAX_HEADER_LIST_SIZE. A peer stores one header value of up to the dynamic table size (4096 bytes by default) and then references it with one-byte indexed fields, so about 100 bytes on the wire decode to a header list of about 390 KB. A consumer that copies the decoded values, as Cowboy does when cowboy_http2:headers_to_map/2 joins repeated cookie fields into one binary, allocates that amount for every stream. The total across streams and connections is not bounded.\n\nThis issue affects cowlib: from 2.7.0 onward.","epss":null,"exploits":[],"kev":null,"metrics":[{"score":8.7,"severity":"high","source":"CNA: EEF","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","version":"4.0"},{"score":8.7,"severity":"high","source":"NVD: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","version":"4.0"}],"modifiedAt":1793963824410,"publishedAt":1793960895837,"references":[{"source":"CNA: EEF","tags":["related","third-party-advisory"],"url":"https://cna.erlef.org/cves/CVE-2026-113431.html"},{"source":"CNA: EEF","tags":["related"],"url":"https://osv.dev/vulnerability/EEF-CVE-2026-113431"},{"source":"CNA: EEF","tags":["related"],"url":"https://github.com/ninenines/cowlib/commit/b461b119e78e4e09bb28b186b09da7ed4a86a0dd"},{"source":"CNA: EEF","tags":["patch"],"url":"https://github.com/ninenines/cowlib/commit/a3b15e29b3067644bfd580246c87f7af7a90b3b8"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://cna.erlef.org/cves/CVE-2026-113431.html"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://github.com/ninenines/cowlib/commit/a3b15e29b3067644bfd580246c87f7af7a90b3b8"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://github.com/ninenines/cowlib/commit/b461b119e78e4e09bb28b186b09da7ed4a86a0dd"},{"source":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","tags":[],"url":"https://osv.dev/vulnerability/EEF-CVE-2026-113431"}],"remediation":[{"kind":"workaround","source":"CNA: EEF","text":"Cowboy servers that do not need HTTP/2 can set protocols => [http] in the protocol options. The listener then answers the HTTP/2 preface with 501 Not Implemented and the decoder is never reached.\n\nLowering max_headers in the HTTP/2 protocol options shrinks the per-stream allocation in proportion, to about max_headers times the 4096-byte table entry. This reduces the amplification but does not remove it."},{"kind":"fix","source":"CNA: EEF","text":"The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches.","url":"https://github.com/ninenines/cowlib/commit/a3b15e29b3067644bfd580246c87f7af7a90b3b8"}],"revision":"4f818a725dbe1a636e6ee9ee1500a72bddd1391cec59abc42b59b25e025b7862","sources":[{"modifiedAt":1793960895837,"name":"CNA: EEF","retrievedAt":1793963319611,"url":"https://www.cve.org/CVERecord?id=CVE-2026-113431"},{"modifiedAt":1793963824410,"name":"NVD","retrievedAt":1793967566043,"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-113431"}],"ssvc":null,"status":"published","title":"Unbounded decoded HTTP/2 header-list size in cowlib cow_http2_machine enables HPACK amplification memory exhaustion","updatedAt":1793967566043}