{"id":"CVE-2026-114213","title":"WebSocket 1-byte continuation frames bypass `max_fragmented_message_size` in Bandit","summary":"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 con…","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 >= 1.11.0 < 1.14.0","mtrudel/bandit >= 21612c7c7b1ce43eccd36d3af3a2299d23513667 < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a"],"ssvc":{"exploitation":"none","automatable":"yes","technicalImpact":"partial","timestamp":"2026-10-26T15:03:01.722486Z"},"published":"2026-10-26","updated":"2026-10-26","sourceUpdated":"2026-10-26T15:35:51.785Z","source":"CVEORG","sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-114213","references":[{"url":"https://github.com/mtrudel/bandit/security/advisories/GHSA-cpx7-qf6w-jc63","label":"WebSocket 1-byte continuation frames bypass `max_fragmented_message_size` in Bandit"},{"url":"https://cna.erlef.org/cves/CVE-2026-114213.html","label":"EEF CNA record for CVE-2026-114213"},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-114213","label":"OSV record EEF-CVE-2026-114213"},{"url":"https://github.com/mtrudel/bandit/commit/21612c7c7b1ce43eccd36d3af3a2299d23513667","label":"Introducing commit 21612c7 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","slug":"CVE-2026-114213","body":"## Overview\n\nAllocation 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.\n\n## Affected\n\n- `bandit >= 1.11.0 < 1.14.0`\n- `mtrudel/bandit >= 21612c7c7b1ce43eccd36d3af3a2299d23513667 < 220b9dfd27f9a21305be2afc75cbe585ddc24e7a`\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n### Workarounds\n\nLower websocket_options: [max_fragmented_message_size: ...] to the largest fragmented message the application needs, for example 65_536. Memory per connection stays at about 150 times this limit, so a lower limit lowers the ceiling.","depth":"twilight","depthScore":48,"depthScoreParts":{"impact":47.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}