{"id":"CVE-2026-110499","kind":"vulnerability","aliases":["CVE-2026-110499"],"related":[],"title":"Bandit: HTTP/2 client can grow server memory and CPU without limit","description":"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.\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.","summary":"Bandit, an Elixir HTTP server, resizes its HPACK header table to whatever size a client requests in SETTINGS, up to about 4 GB, and never evicts entries. An unauthenticated remote client can make each connection consume unbounded memory and CPU, slowing or exhausting the server.","severity":"high","cvss":8.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["bandit","elixir","package","phoenix","self-hosted"],"not_affected_if":["bandit-1.14.0-or-later","http1-only","http2-terminated-at-proxy"],"how_to_check":"- Check the bandit version in `mix.lock` or `mix deps` output and confirm whether it is below `1.14.0`\n- Confirm the application serves HTTP/2 by checking for `http_2` or `:http_2` options in the endpoint configuration","fix":"- Upgrade the `bandit` dependency to `1.14.0` or later and redeploy\n- Put a reverse proxy or load balancer with HTTP/2 connection limits in front of the service until the upgrade is applied","status":"open","published_at":"2026-10-26T14:16:26+00:00","first_seen_at":"2026-10-26T14:30:36+00:00","triaged_at":"2026-10-26T14:32:12+00:00","updated_at":"2026-10-26T14:32:12+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-26T14:32:12Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the `bandit` dependency to `1.14.0` or later and redeploy\n- Put a reverse proxy or load balancer with HTTP/2 connection limits in front of the service until the upgrade is applied","reach":"internet","title":"Bandit: HTTP/2 client can grow server memory and CPU without limit","impact":"medium","summary":"Bandit, an Elixir HTTP server, resizes its HPACK header table to whatever size a client requests in SETTINGS, up to about 4 GB, and never evicts entries. An unauthenticated remote client can make each connection consume unbounded memory and CPU, slowing or exhausting the server.","category":"package","nicknames":[],"who_cares":["elixir","bandit","phoenix","self-hosted"],"confidence":0.8,"needs_auth":"no","worst_case":"Remote client exhausts server memory and CPU, causing denial of service","analyst_note":"","how_to_check":"- Check the bandit version in `mix.lock` or `mix deps` output and confirm whether it is below `1.14.0`\n- Confirm the application serves HTTP/2 by checking for `http_2` or `:http_2` options in the endpoint configuration","needs_analyst":false,"not_affected_if":["http1-only","http2-terminated-at-proxy","bandit-1.14.0-or-later"],"who_is_affected":"Elixir applications that serve HTTP/2 directly with Bandit from versions 0.3.6 up to but not including 1.14.0. Applications that serve only HTTP/1.1, or that terminate HTTP/2 at a proxy that does not pass it through to Bandit, are not exposed to this path.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000663,"input_tokens":3573,"output_tokens":611,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-1':124C '-110499':14A,17A '-2026':13A,16A '/2':179C '0.3.6':215C '1.14.0':217C '2':122C '32':123C '4':46B 'advertis':119C 'affect':212C 'alloc':70C 'allow':85C 'attack':89C 'bandit':1A,18B,25B,84C,108C,213C 'bandit.http2.connection':170C 'bound':100C 'byte':125C 'cap':185C 'carri':134C 'client':3A,39B,55B,118C 'connect':59B,94C,159C,200C,208C 'consum':60B 'content':142C 'content-length':141C 'cost':98C,202C 'cpu':9A,64B,97C,205C 'cve':12A,15A 'date':139C 'distinct':135C 'elixir':19B,27B 'encod':112C,187C,189C 'entri':51B 'everi':152C,190C 'evict':50B,146C 'exhaust':67B 'gb':47B 'grow':5A,91C,150C 'handl':168C 'header':33B,105C,129C,188C,192C 'host':24B 'hpack':32B,111C 'hpax.resize':178C 'hpax.resize/2':177C 'http':28B 'http/2':2A,80C 'implement':81C 'index':127C 'issu':211C 'larg':103C 'length':143C 'lib/bandit/http2/connection.ex':171C 'life':156C 'limit':11A,74C 'linear':165C 'lookup':162C 'make':57B 'memori':7A,62B,95C 'mtrudel':83C 'n':196C,204C 'never':49B 'noth':144C 'o':203C 'one':199C 'packag':20B 'pass':172C 'per':93C 'per-connect':92C 'phoenix':21B 'process':209C 'remot':54B,88C 'remote_settings.header':173C 'request':40B 'resiz':30B,109C 'resourc':72C 'respons':128C,133C,153C,191C,197C 'scan':163C 'self':23B 'self-host':22B 'serv':195C 'server':6A,29B,69B,183C 'server-sid':182C 'set':42B,104C,167C 'side':184C 'size':37B,107C,116C,175C 'slow':65B 'store':194C 'tabl':34B,106C,113C,149C,174C 'therefor':201C 'throttl':76C 'unauthent':53B,87C 'unbound':61B 'valu':136C 'via':101C 'vulner':77C 'whatev':36B,115C 'without':10A,73C,99C","nicknames":[],"mitigations":[],"who_affected":"Elixir applications that serve HTTP/2 directly with Bandit from versions 0.3.6 up to but not including 1.14.0. Applications that serve only HTTP/1.1, or that terminate HTTP/2 at a proxy that does not pass it through to Bandit, are not exposed to this path.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T14:16:26+00:00","kev":null,"cvss_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","cvss_by":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-110499","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-110499","severity":null,"published_at":"2026-10-26T14:16:26+00:00","modified_at":"2026-10-26T14:16:26+00:00","first_seen_at":"2026-10-26T14:30:36+00:00","fetched_at":"2026-10-26T14:30:36+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}