{"id":"CVE-2026-110499","title":"Client-chosen HPACK encoder table size is applied uncapped, growing per-connection state with every response in Bandit","summary":"Allocation of Resources Without Limits or Throttling vulnerability in the HTTP/2 implementation of mtrudel bandit allows an unauthenticated remote attacker to grow per-connection memory and CPU cost without bound via a large SETTINGS_HEA…","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-770"],"vendor":"mtrudel","product":"bandit","affected":["bandit >= 0.3.6 < 1.14.0","mtrudel/bandit >= 0e68313fab9d204257ebad5c447e4cd9cea8e0ea < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a"],"ssvc":{"exploitation":"none","automatable":"yes","technicalImpact":"partial","timestamp":"2026-10-26T15:02:00.207666Z"},"published":"2026-10-26","updated":"2026-10-26","sourceUpdated":"2026-10-26T15:35:50.929Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-110499","references":[{"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-47x4-3fxf-82fr","label":"Client-chosen HPACK encoder table size is applied uncapped, growing per-connection state with every response in Bandit"},{"url":"https://cna.erlef.org/cves/CVE-2026-110499.html","label":"EEF CNA record for CVE-2026-110499"},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-110499","label":"OSV record EEF-CVE-2026-110499"},{"url":"https://github.com/mtrudel/bandit/commit/0e68313fab9d204257ebad5c447e4cd9cea8e0ea","label":"Introducing commit 0e68313 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.820Z","slug":"CVE-2026-110499","body":"## Overview\n\nAllocation of Resources Without Limits or Throttling vulnerability in the HTTP/2 implementation of mtrudel bandit allows an unauthenticated remote attacker to grow per-connection memory and CPU cost without bound via a large SETTINGS_HEADER_TABLE_SIZE. Bandit resizes its HPACK encoder table to whatever size the client advertises, up to 2^32-1 bytes, and indexes response headers into it. Because responses carry distinct values such as date or content-length, nothing is evicted and the table grows with every response for the life of the connection, while each lookup scans it linearly.\n\nThe SETTINGS handling in Bandit.HTTP2.Connection (lib/bandit/http2/connection.ex) passes remote_settings.header_table_size to HPAX.resize/2 with no server-side cap, and encode_headers encodes every response header as :store. Serving N responses on one connection therefore costs O(N²) CPU in the connection process.\n\nThis issue affects bandit: from 0.3.6 before 1.14.0.\n\n## Affected\n\n- `bandit >= 0.3.6 < 1.14.0`\n- `mtrudel/bandit >= 0e68313fab9d204257ebad5c447e4cd9cea8e0ea < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n### Workarounds\n\nFrom 0.7.0, cap the requests one HTTP/2 connection may serve, for example with http_2_options: [max_requests: 1000], so each connection and its encoder table is closed before the cost grows large. Alternatively, disable HTTP/2 with http_2_options: [enabled: false].","depth":"twilight","depthScore":48,"depthScoreParts":{"impact":47.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}