Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Bandit HTTP/1.1 listener unauthenticated
-
DeliverySend POST with Transfer-Encoding: chunked
-
ExploitStream body as many 1-byte chunks
-
ExecutionChunk reader accumulates per-chunk cons cells and binaries
-
PersistHandler heap and BEAM memory amplify, CPU spikes
-
ImpactServer memory/CPU exhausted (denial of 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 | Requires only that the target run Bandit (>= 0.1.0, < 1.14.0) with HTTP/1.1 accepted, which is the default; the attacker sends one unauthenticated POST with Transfer-Encoding: chunked whose body is many 1-byte chunks. No authentication (PR:N), no user interaction (UI:N), and no special route behavior are needed - the vulnerable chunked reader is reached even by routes that never call read_body, because on keep-alive connections ensure_completed/1 drains unread bodies through the same path. The only limiting factor is HTTP/1.1 reachability: per the advisory, from version 0.7.0 a deployment whose clients and proxies all speak HTTP/2 can set http_1_options: [enabled: false] so the vulnerable reader never runs; otherwise the vendor fix in 1.14.0 is the remedy. |
| Impact | This is a real, prioritizable availability issue but not a top-tier emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) is confirmed by the input and is internally consistent with the description: an unauthenticated remote attacker over the network, with low complexity and no user interaction, can trigger the flaw, and impact is confined to availability (VA:H; VC/VI/VA show no confidentiality or integrity loss), which matches a CWE-770 resource-exhaustion DoS. The vuln.today decision label is 'this_week' rather than act_now/emergency, so the urgency is elevated but routine patch-cycle, not drop-everything. No EPSS score and no CISA KEV entry are provided, so there is no evidence of active exploitation or a quantified exploitation probability - absence of these is not itself a defect, but it means the priority rests on the CVSS/SSVC-style signals plus the detailed PoC in the vendor advisory. The GHSA advisory includes concrete reproduction steps and measured amplification (a 1 MB body holding ~48 MB; ~417 MB from a route that never reads the body), so a public PoC reference exists; it is not verified as working exploit code. Net: credible, cheap-to-launch unauthenticated memory/CPU amplification against any Bandit server accepting HTTP/1.1, with a confirmed fix - patch on a near-term schedule consistent with the 'this_week' label. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a single HTTP/1.1 POST with Transfer-Encoding: chunked whose body is composed of a large number of 1-byte chunks (e.g. ~1,000,000 chunks of '1\r\nA\r\n' then '0\r\n\r\n'). Because each chunk is retained as its own list cell and binary term until IO.iodata_to_binary joins them, and :length only caps data bytes, the handler process balloons to many times the payload size (~48 MB held for a 1 MB body) and burns seconds of CPU, exhausting memory even against routes that never read the body. A detailed proof-of-concept with these exact steps is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 26, 2026
Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets a single remote attacker exhaust server memory and CPU with one HTTP/1.1 request whose chunked body is composed of a very large number of 1-byte chunks. Because the chunked reader keeps every chunk as its own cons cell and binary term until IO.iodata_to_binary/1 joins them, and the :length option of read_body/2 counts only data bytes, the vendor's reproduction shows 48 MB of 1-byte chunks growing one handler process to roughly 500 MB and consuming about 6 seconds of CPU - a ~48x amplification over the payload sent - and the amplification also occurs against routes that never call read_body, since ensure_completed/1 drains unread bodies on keep-alive connections. HTTP/1.1 is enabled by default, so any default deployment is exposed without authentication or user interaction; the vendor shipped a fix in 1.14.0, there are no reports of exploitation in CISA KEV and no independently confirmed public exploit code, though the advisory does publish detailed reproduction steps.
RemediationAI
Upgrade to Bandit 1.14.0, the vendor-released fixed version, which adds the missing limitation on chunk accumulation in the HTTP/1.1 chunked reader; the patch is tracked in https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a with the original introducing change at https://github.com/mtrudel/bandit/commit/7201270c34b90f6c9e15c0386c2bb802c0c72ab4, and full guidance is in advisory GHSA-jwh3-j29h-qfmw. Note that tightening Plug.Conn.read_body/2 options is not a fix: the :length option limits only data bytes, not chunk count, and routes that never read the body are still drained through the same vulnerable path by ensure_completed/1 on keep-alive connections. The vendor-documented workaround, available from 0.7.0, is to disable HTTP/1.1 entirely with http_1_options: [enabled: false] so the vulnerable chunked reader never runs; the trade-off is that it is only safe when every client and proxy in front of the service speaks HTTP/2, and it will reject or break any HTTP/1.0 or HTTP/1.1 client, so it should be treated as a stopgap until 1.14.0 is deployed. Reviewing deployment topology for HTTP/1.1 reachability is worthwhile since that is the only precondition for the attack; no other limits (rate limiting, request body size caps) are described in the available sources as fully mitigating the per-chunk memory amplification.
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 a pure-Elixir HTTP server that implements the Plug.Conn.Adapter behaviour, and the flaw is a textbook CWE-770 (Allocation of Resources Without Limits or Throttling) in its HTTP/1.1 request-body machinery in lib/bandit/http1/socket.ex. When a request carries Transfer-Encoding: chunked, do_read_chunked_data! accumulates each decoded chunk with [body | chunk], allocating a new list cell plus a separate binary term per chunk, and only calls IO.iodata_to_binary/1 at the very end to flatten the improper list into a single binary. Nothing bounds the chunk count, and the :length option exposed through Plug.Conn.read_body/2 constrains only accumulated data bytes - so 1-byte chunks are effectively free to send but enormously expensive to hold. A body of 1\r\nx\r\n repeated becomes an eight-million-element list before it is flattened, and BEAM heap growth per handler process scales with chunk count rather than byte count (48 MB of 1-byte chunks ≈ 500 MB heap and ~6 s CPU, versus ~16 MB and 5 ms for the same volume delivered as one 8 MB chunk). The same reader is reached on keep-alive connections by ensure_completed/1, which drains unread request bodies, so the attack works even when the Plug never reads the body - measured at about 417 MB in that configuration. The CVSS v4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VA:H with no confidentiality or integrity impact) and CVSS v3.1 assessment (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) both describe a pure availability impact, and the affected package range in the CPE data (cpe:2.3:a:mtrudel:bandit) covers every release from 0.1.0 onward before 1.14.0.
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/1.1 (AV:N/AC:L/PR:N/UI:N); only availability is affected (A:H, C:N/I:N) with no scope change.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Allocation of Resources Without Limits or Throttling vulnerability in the HTTP/1.1 chunked body reader of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory and CPU via a request body made of many 1-byte chunks.
The chunked reader in lib/bandit/http1/socket.ex keeps every chunk as its own list cell and binary term until IO.iodata_to_binary/1 joins them, and nothing limits the number of chunks. The :length option of read_body/2 counts only data bytes, so tiny chunks cost far more memory than their payload: 48 MB of 1-byte chunks grew one handler process to about 500 MB and took about 6 s of CPU. The route does not need to read the body, because on keep-alive connections ensure_completed/1 drains unread bodies through the same reader.
This issue affects bandit: from 0.1.0 before 1.14.0.
Technical POC Analysis
CWE-770 (Allocation of Resources Without Limits or Throttling), specifically unbounded per-element allocation in the HTTP/1.1 chunked request 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
CVE-2026-111101 is a high-severity unauthenticated denial-of-service vulnerability in the Elixir Bandit HTTP server that can allow a single attacker to exhaust server resources with one malicious request. Any organization using Bandit versions before 1.14.0 in a default configuration is exposed, potentially causing service outages and operational disruption until the patch is applied.
Apply vendor patch. If immediate patching is not possible, restrict HTTP/1.1 chunked transfer encoding at the reverse proxy or load balancer, enforce request size and chunk count limits, and monitor for anomalous memory or CPU usage.
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
Bandit's HTTP/2 request body reader amplifies memory use, letting an unauthenticated remote client make a server hold ro
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
EUVD-2026-109824
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB