{"id":"CVE-2026-114213","kind":"vulnerability","aliases":["CVE-2026-114213"],"related":[],"title":"Bandit: WebSocket fragments exhaust server memory from one unauthenticated connection","description":"Allocation of Resources Without Limits or Throttling vulnerability in the WebSocket fragment reassembly of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory via a fragmented message made of many 1-byte continuation frames.\n\nBandit.WebSocket.Connection checks max_fragmented_message_size against the payload bytes received, but keeps every non-final continuation frame as a new list cell around its own binary, and nothing limits the number of fragments. A 1-byte fragment costs 7 bytes on the wire but about 150 to 170 bytes of server memory, so one connection can hold about 150 times the configured limit, roughly 1.2 to 1.4 GB at the default 8 MB. Ping frames between fragments keep the connection alive past the idle timeout.\n\nThis issue affects bandit: from 1.11.0 before 1.14.0.","summary":"Bandit, an Elixir HTTP server, keeps each 1-byte WebSocket continuation fragment as its own list cell, so one connection can hold about 150 times the configured fragment size limit in memory. An unauthenticated remote attacker can exhaust server memory, roughly 1.2 to 1.4 GB at the default 8 MB limit, and keep the connection alive with ping frames.","severity":"high","cvss":8.7,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["bandit","elixir","package","phoenix","self-hosted","websocket"],"not_affected_if":["bandit-1.14.0-or-later","bandit-below-1.11.0","no-websockets"],"how_to_check":"- Run `mix deps | grep bandit` or check `mix.lock` for the bandit version in use\n- Confirm the app uses WebSocket endpoints served by Bandit (`WebSock` or `Plug` upgrades)\n- Check whether `max_fragmented_message_size` is set in the Bandit WebSocket options","fix":"- Upgrade bandit to `1.14.0` or later\n- Update `mix.lock` and redeploy the release","status":"open","published_at":"2026-10-26T14:16:29+00:00","first_seen_at":"2026-10-26T14:30:36+00:00","triaged_at":"2026-10-26T14:32:08+00:00","updated_at":"2026-10-26T14:32:08+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-26T14:32:08Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade bandit to `1.14.0` or later\n- Update `mix.lock` and redeploy the release","reach":"internet","title":"Bandit: WebSocket fragments exhaust server memory from one unauthenticated connection","impact":"medium","summary":"Bandit, an Elixir HTTP server, keeps each 1-byte WebSocket continuation fragment as its own list cell, so one connection can hold about 150 times the configured fragment size limit in memory. An unauthenticated remote attacker can exhaust server memory, roughly 1.2 to 1.4 GB at the default 8 MB limit, and keep the connection alive with ping frames.","category":"package","nicknames":[],"who_cares":["elixir","bandit","phoenix","websocket","self-hosted"],"confidence":0.8,"needs_auth":"no","worst_case":"Remote attacker exhausts server memory via one WebSocket connection, causing a crash","analyst_note":"","how_to_check":"- Run `mix deps | grep bandit` or check `mix.lock` for the bandit version in use\n- Confirm the app uses WebSocket endpoints served by Bandit (`WebSock` or `Plug` upgrades)\n- Check whether `max_fragmented_message_size` is set in the Bandit WebSocket options","needs_analyst":false,"not_affected_if":["no-websockets","bandit-below-1.11.0","bandit-1.14.0-or-later"],"who_is_affected":"Applications that run the mtrudel bandit HTTP server at versions from 1.11.0 up to but not including 1.14.0 and accept WebSocket connections from untrusted clients. Apps that do not serve WebSockets through Bandit, or that sit behind a proxy that rejects fragmented WebSocket messages, are less exposed. The sources do not say whether a proxy in front of Bandit blocks this pattern.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000693,"input_tokens":3517,"output_tokens":683,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-114213':13A,16A '-2026':12A,15A '1':32B,116C,156C '1.11.0':212C '1.14.0':214C '1.2':66B,186C '1.4':68B,188C '150':48B,167C,180C '170':169C '7':160C '8':73B,193C 'affect':209C 'aliv':80B,202C 'alloc':84C 'allow':100C 'around':144C 'attack':60B,104C 'bandit':1A,17B,25B,99C,210C 'bandit.websocket.connection':120C 'binari':147C 'byte':33B,117C,129C,157C,161C,170C 'cell':41B,143C 'check':121C 'configur':51B,183C 'connect':10A,44B,79B,176C,201C 'continu':35B,118C,137C 'cost':159C 'cve':11A,14A 'default':72B,192C 'elixir':18B,27B 'everi':133C 'exhaust':4A,62B,106C 'final':136C 'fragment':3A,36B,52B,95C,111C,123C,154C,158C,198C 'frame':83B,119C,138C,196C 'gb':69B,189C 'hold':46B,178C 'host':23B 'http':28B 'idl':205C 'issu':208C 'keep':30B,77B,132C,199C 'limit':54B,75B,88C,150C,184C 'list':40B,142C 'made':113C 'mani':115C 'max':122C 'mb':74B,194C 'memori':6A,56B,64B,108C,173C 'messag':112C,124C 'mtrudel':98C 'new':141C 'non':135C 'non-fin':134C 'noth':149C 'number':152C 'one':8A,43B,175C 'packag':19B 'past':203C 'payload':128C 'phoenix':20B 'ping':82B,195C 'reassembl':96C 'receiv':130C 'remot':59B,103C 'resourc':86C 'rough':65B,185C 'self':22B 'self-host':21B 'server':5A,29B,63B,107C,172C 'size':53B,125C 'throttl':90C 'time':49B,181C 'timeout':206C 'unauthent':9A,58B,102C 'via':109C 'vulner':91C 'websocket':2A,24B,34B,94C 'wire':164C 'without':87C","nicknames":[],"mitigations":[],"who_affected":"Applications that run the mtrudel bandit HTTP server at versions from 1.11.0 up to but not including 1.14.0 and accept WebSocket connections from untrusted clients. Apps that do not serve WebSockets through Bandit, or that sit behind a proxy that rejects fragmented WebSocket messages, are less exposed. The sources do not say whether a proxy in front of Bandit blocks this pattern.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-26T14:16:29+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-114213","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114213","severity":null,"published_at":"2026-10-26T14:16:29+00:00","modified_at":"2026-10-26T14:16:29+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"}