Skip to main content

Bandit EUVDEUVD-2026-109824

| CVE-2026-111101 HIGH
Allocation of Resources Without Limits or Throttling (CWE-770)
2026-10-26 EEF
8.7
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach Bandit HTTP/1.1 listener unauthenticated
  2. Delivery
    Send POST with Transfer-Encoding: chunked
  3. Exploit
    Stream body as many 1-byte chunks
  4. Execution
    Chunk reader accumulates per-chunk cons cells and binaries
  5. Persist
    Handler heap and BEAM memory amplify, CPU spikes
  6. Impact
    Server 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.6% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

bandit 7201270c34b90f6c9e15c0386c2bb802c0c72ab4 <220b9dfd27f9a21305be2afc75cbe585ddc24e7a
bandit 0.1.0 <1.14.0

Affected Packages

euvd bandit fix: 1.14.0

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

Vendor (EEF) PRIMARY 8.7 HIGH
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
vuln.today AI 7.5 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.6%
Top 51% exploitable
Prevalence
Medium
Elixir HTTP server (now default Phoenix adapter) but Elixir ecosystem only
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.6%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

45
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Bandit

View all
CVE-2026-42786 HIGH POC
8.7 May 01

Memory exhaustion in Bandit WebSocket server (versions 0.5.0 through 1.10.x) allows unauthenticated remote attackers to

CVE-2026-39804 HIGH POC
8.2 May 01

Memory exhaustion in Bandit WebSocket server (versions 0.5.9 through 1.10.x) allows unauthenticated remote attackers to

CVE-2026-42788 MEDIUM POC
6.9 May 01

Denial of service in mtrudel bandit via HTTP/2 frame deserialization allows unauthenticated remote attackers to exhaust

CVE-2026-39807 MEDIUM POC
6.3 May 01

Transport-state spoofing in Bandit 1.0.0 through 1.10.x allows unauthenticated remote attackers to forge HTTPS connectio

CVE-2026-39805 MEDIUM POC
6.3 May 01

HTTP request smuggling in mtrudel bandit before version 1.11.0 allows unauthenticated attackers to bypass edge security

CVE-2026-105659 HIGH
8.7 Oct 14

Uncontrolled HTTP/2 flow-control resource consumption in mtrudel/bandit 1.4.0 and later lets an unauthenticated remote p

CVE-2026-39806 HIGH
8.7 May 13

Unauthenticated remote denial of service in mtrudel Bandit (Elixir HTTP server) versions 1.6.1 through 1.11.0 lets any c

CVE-2026-65623 HIGH
8.7 Jul 24

CPU exhaustion in bandit 1.11.0 to 1.12.0 allows unauthenticated remote denial-of-service via WebSocket fragment reassem

CVE-2026-39803 HIGH
8.7 May 13

Unauthenticated remote denial of service in Bandit (the Elixir HTTP/1 web server for Phoenix/Plug applications) versions

CVE-2026-116078 HIGH
8.7 Oct 28

Bandit's HTTP/2 request body reader amplifies memory use, letting an unauthenticated remote client make a server hold ro

CVE-2026-108529 HIGH
8.7 Oct 26

Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin

CVE-2026-110499 HIGH
8.7 Oct 26

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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy