Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen HTTP/2 connection to Bandit
-
DeliverySend POST HEADERS on up to 500 streams
-
ExploitStream request bodies as interleaved 1-byte DATA frames
-
ExecutionServer accumulates one cons cell and binary per byte
-
PersistHold open reads to amplify memory 5-8x
-
ImpactExhaust BEAM memory and degrade/deny service
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource allocation limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Two concrete preconditions must both hold: (1) HTTP/2 must be enabled on the Bandit listener (it is enabled by default; the documented workaround from 0.7.0 is http_2_options: [enabled: false]), and (2) the target route's Plug must actually read the request body - which any route behind Plug.Parsers does for POST, PUT, and PATCH. No authentication is required (CVSS PR:N) and no user interaction (UI:N). Limiting factors that reduce realistic impact: the attack only bites routes that read bodies, the memory overhead is an amplification ratio (~5-8x bytes sent) held only for the duration of each open read rather than an unbounded or permanent allocation, and it is bounded per connection by the 500-concurrent-stream cap, so sustained denial of service requires many concurrent streams and connections held open against the read_timeout deadline. The complete fix is upgrading to bandit 1.14.1; disabling HTTP/2 is the only stated workaround and removes HTTP/2 functionality. |
| Impact | This is a genuine but bounded availability risk, best read as 'patch this_week' rather than a drop-everything emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) scores 8.7 (High) and is internally consistent with the description: an unauthenticated remote attacker over the network can trigger the flaw with low complexity and no user interaction, and the only impact metric set is VA:H (availability high), with VC:N/VI:N - no confidentiality or integrity loss, which matches a CWE-770 memory-exhaustion denial of service. No EPSS score, no CISA KEV listing, and no 'POC confirmed' flag are present in the input, so there is no signal of active exploitation; however, the GHSA advisory itself contains a detailed step-by-step reproduction, so a public PoC reference exists even though it is not verified as packaged working exploit code. The vuln.today Decision label is 'this_week,' consistent with a high-severity, network-reachable, unauthenticated DoS against which a patch already exists. The main factors moderating real-world urgency are deployment preconditions (HTTP/2 must be enabled and the route must read the request body) and the fact that the amplification is a ~5-8x memory multiplier bounded by the read deadline and the 500-streams-per-connection limit, i.e. resource pressure rather than a single-request crash. Missing data to note explicitly: EPSS is absent, so widespread-vs-targeted exploitation likelihood cannot be quantified; KEV is not listed; and no third party has independently confirmed exploitation. |
| Exploit ScenarioDerived | An unauthenticated attacker opens an HTTP/2 (h2c or TLS) connection to a Bandit server and sends POST requests on up to 100-500 concurrent streams, each carrying its request body as thousands of interleaved 1-byte DATA frames without END_STREAM. Because Bandit accumulates each frame as its own list cell plus heap binary and bounds reads only by byte count, the server holds roughly 5-8x the bytes sent in stream-process memory for the life of each open body read; repeating this across many connections drives the BEAM toward memory exhaustion. The GHSA advisory publishes a concrete reproduction (100 streams × 5,000 frames held 25-40 MiB for ~5 MB sent), so a public PoC reference exists, though it is not verified as a packaged working exploit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Bandit's HTTP/2 request body reader amplifies memory use, letting an unauthenticated remote client make a server hold roughly 5 to 8 times the body bytes it sends in stream process memory. Affected are versions from 0.3.1 before 1.14.1 on listeners where HTTP/2 is enabled and the route's Plug actually reads the request body, which includes anything behind Plug.Parsers for POST, PUT and PATCH. A public proof-of-concept reference exists; it is not verified as working exploit code, and no active exploitation has been confirmed. Vendor-released patch: 1.14.1.
RemediationAI
Upgrade bandit to 1.14.1, which contains the upstream fix commit 327bb02ff84171237e1aeff787930debd16155ee; the advisory is at https://github.com/mtrudel/bandit/security/advisories/GHSA-pxjf-g536-7r93 and OSV at https://osv.dev/vulnerability/EEF-CVE-2026-116078. If an immediate upgrade is not possible, the only stated workaround, available from 0.7.0, is to disable HTTP/2 with http_2_options: [enabled: false], so the vulnerable body reader never runs - with the trade-off that HTTP/2 functionality is removed for those clients. No other compensating control is documented; priority guidance is to patch this week rather than treat it as a drop-everything emergency, since the allocation is an amplification bounded by the 500-concurrent-stream cap and held only for the duration of each open body read.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Bandit is an Elixir HTTP server built directly on Thousand Island and Plug. In the HTTP/2 stream implementation, do_read_data/5 in lib/bandit/http2/stream.ex prepends each {:data, data, stream} payload received from the connection process onto an accumulator list and reverses it when the read returns, so every DATA frame occupies its own cons cell plus a heap binary until the read completes. The :length option of read_body/2 (default 8,000,000) is decremented by byte_size(data) and therefore bounds body bytes rather than frame count, so a body delivered as many 1-byte DATA frames pays a list cell and a binary term per byte while adding no meaningful read_timeout credit. Interleaving one frame per stream per round across up to 500 concurrent streams per connection keeps each stream consuming frames as they arrive and below the connection's 16-message buffering threshold, defeating per-stream buffering regardless of TCP segment size. The reporter measured 100 streams holding 25 to 40 MiB of stream process memory for about 5 MB sent, and a single stream holding 2 to 4 MiB for 58 KiB of body. The root cause class is CWE-770, allocation of resources without limits or throttling, giving a network-reachable, no-authentication, no-interaction availability impact (assessed CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H).
Know when Bandit gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
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
Remote, unauthenticated, no interaction against default HTTP/2 (AV:N/AC:L/PR:N/UI:N); only availability is affected (A:H, C:N/I:N) with no scope change (S:U).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Allocation of Resources Without Limits or Throttling vulnerability in the HTTP/2 request body reader of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory via a request body sent as many 1-byte DATA frames.
do_read_data/5 in lib/bandit/http2/stream.ex keeps every DATA frame payload as its own list element until the read returns. The :length option of read_body/2 counts body bytes, not frames, so a body of 1-byte frames costs a list cell and a binary term per byte. Interleaving the frames across up to 500 concurrent streams per connection keeps each stream consuming its frames as they arrive; in the reporter's test, 100 streams held 25 to 40 MiB of stream process memory for 5 MB sent. Only routes whose Plug reads the request body are affected, which includes any route behind Plug.Parsers.
This issue affects bandit: from 0.3.1 before 1.14.1.
Technical POC Analysis
CWE-770 (Allocation of Resources Without Limits or Throttling), implemented as a memory amplification in Bandit's HTTP/2 body reader.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A memory amplification flaw in Bandit's HTTP/2 request body reader allows unauthenticated remote clients to force servers to allocate 5-8 times the data sent, potentially causing memory exhaustion and service disruption. Organizations running affected Bandit versions (0.3.1 to 1.14.1) with HTTP/2 and Plug parsers are at risk, with business continuity implications for customer-facing and internal APIs. While no active exploitation has been confirmed, a public proof-of-concept reference exists, warranting immediate remediation to maintain service availability and protect reputation.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Memory exhaustion in Bandit WebSocket server (versions 0.5.0 through 1.10.x) allows unauthenticated remote attackers to
Memory exhaustion in Bandit WebSocket server (versions 0.5.9 through 1.10.x) allows unauthenticated remote attackers to
Denial of service in mtrudel bandit via HTTP/2 frame deserialization allows unauthenticated remote attackers to exhaust
Transport-state spoofing in Bandit 1.0.0 through 1.10.x allows unauthenticated remote attackers to forge HTTPS connectio
HTTP request smuggling in mtrudel bandit before version 1.11.0 allows unauthenticated attackers to bypass edge security
Uncontrolled HTTP/2 flow-control resource consumption in mtrudel/bandit 1.4.0 and later lets an unauthenticated remote p
Unauthenticated remote denial of service in mtrudel Bandit (Elixir HTTP server) versions 1.6.1 through 1.11.0 lets any c
CPU exhaustion in bandit 1.11.0 to 1.12.0 allows unauthenticated remote denial-of-service via WebSocket fragment reassem
Unauthenticated remote denial of service in Bandit (the Elixir HTTP/1 web server for Phoenix/Plug applications) versions
Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin
Unbounded per-connection memory and CPU growth in the Elixir Bandit HTTP/2 server (0.3.6 up to 1.14.0) lets an unauthent
Unauthenticated remote attackers can exhaust BEAM node memory on default-configured mtrudel Bandit HTTP/2 servers (0.3.3
EUVD-2026-112087
NVD
CVE.org
GitHub
Exploit-DB