Bandit: Uncapped HPACK table size in HTTP/2 allows resource exhaustion
Summary
Bandit, an Elixir HTTP server, applies any HPACK encoder table size that an HTTP/2 client advertises, up to about 4 GB, without a server-side limit. Response headers with changing values are stored in this table, which grows for the life of the connection and is scanned linearly for each lookup. An unauthenticated remote attacker can make one HTTP/2 connection progressively more expensive in CPU and memory, which can exhaust server resources. The issue affects Bandit from 0.3.6 before 1.14.0.
Affected
- Bandit (Hex package bandit) from 0.3.6 before 1.14.0
Fixed in
- Bandit 1.14.0 (fix commit 220b9df)
Workaround
- Disable HTTP/2: http_2_options: [enabled: false]
- Or limit requests per HTTP/2 connection (from 0.7.0): http_2_options: [max_requests: 1000]
Exploitation
- CISA SSVC: exploitation none, automatable yes, technical impact partial.
- No evidence of exploitation in the wild was found at the time of writing.
Our recommendation
- Identify Bandit services in your Elixir applications (check mix.lock).
- Upgrade to Bandit 1.14.0 or later.
- If HTTP/2 is exposed directly to the internet and an upgrade is not possible, disable HTTP/2 or apply the per-connection request limit.
- Monitor CPU and memory usage of HTTP/2 services.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- CNA record CVE-2026-110499 cna.erlef.org
- GitHub Security Advisory GHSA-47x4-3fxf-82fr github.com
- OSV record EEF-CVE-2026-110499 osv.dev
- Fix commit 220b9df github.com
- Introducing commit 0e68313 github.com
- Ubuntu CVE tracker CVE-2026-110499 ubuntu.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 00:13.
Original description (NVD)
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_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. The 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. This issue affects bandit: from 0.3.6 before 1.14.0.
NVD references (5)
- https://cna.erlef.org/cves/CVE-2026-110499.html
- https://github.com/mtrudel/bandit/commit/0e68313fab9d204257ebad5c447e4cd9cea8e0ea
- https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a
- https://github.com/mtrudel/bandit/security/advisories/GHSA-47x4-3fxf-82fr
- https://osv.dev/vulnerability/EEF-CVE-2026-110499
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
