{"id":"CVE-2026-109584","title":"HTTP/2 cookie crumb join expands a small HPACK header block into an unbounded allocation in Bandit","summary":"Improper Handling of Highly Compressed Data (Data Amplification) vulnerability in the HTTP/2 implementation of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory via a small HPACK-compressed HEADERS block. …","severity":"high","cvss":8.7,"cvssVector":"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","cvssSource":"cna","cwe":["CWE-409"],"vendor":"mtrudel","product":"bandit","affected":["bandit >= 0.3.3 < 1.14.0","mtrudel/bandit >= 44bf969cd59851622fb6ee4d16227fbc39a77fb4 < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a"],"ssvc":{"exploitation":"none","automatable":"yes","technicalImpact":"partial","timestamp":"2026-10-26T15:11:12.403348Z"},"published":"2026-10-26","updated":"2026-10-26","sourceUpdated":"2026-10-26T15:35:51.081Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-109584","references":[{"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-7gfj-7gvq-3xqj","label":"HTTP/2 cookie crumb join expands a small HPACK header block into an unbounded allocation in Bandit"},{"url":"https://cna.erlef.org/cves/CVE-2026-109584.html","label":"EEF CNA record for CVE-2026-109584"},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-109584","label":"OSV record EEF-CVE-2026-109584"},{"url":"https://github.com/mtrudel/bandit/commit/44bf969cd59851622fb6ee4d16227fbc39a77fb4","label":"Introducing commit 44bf969 in mtrudel/bandit"},{"url":"https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a","label":"Fix commit 220b9df in mtrudel/bandit"}],"tags":["cve.org"],"ingestedAt":"2026-10-26T14:27:31.821Z","epss":0.00602,"epssPercentile":0.48612,"slug":"CVE-2026-109584","body":"## Overview\n\nImproper Handling of Highly Compressed Data (Data Amplification) vulnerability in the HTTP/2 implementation of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory via a small HPACK-compressed HEADERS block. The block stores one large cookie value in the HPACK dynamic table and then references it tens of thousands of times with 1-byte indexed fields. In the reporter's run, a 49 KB block made a server with default settings allocate a 183 MB cookie binary before any application code ran, and every concurrent stream can repeat the cost.\n\nBandit.HTTP2.Connection caps only the compressed block (max_header_block_size), and its check of the decoded list against max_header_list_size never fires because that setting defaults to :infinity. combine_cookie_crumbs/1 in lib/bandit/http2/stream.ex then joins every crumb into one binary.\n\nThis issue affects bandit: from 0.3.3 before 1.14.0.\n\n## Affected\n\n- `bandit >= 0.3.3 < 1.14.0`\n- `mtrudel/bandit >= 44bf969cd59851622fb6ee4d16227fbc39a77fb4 < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n### Workarounds\n\nOn 1.12.2 and later, set a finite decoded header list limit, for example http_2_options: [default_local_settings: [max_header_list_size: 65_536]], which resets the stream before the cookie crumbs are joined. From 0.7.0, disabling HTTP/2 with http_2_options: [enabled: false] removes the vulnerable path.","depth":"twilight","depthScore":48,"depthScoreParts":{"impact":47.8,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}