Skip to main content

Bandit EUVDEUVD-2026-109819

| CVE-2026-115269 HIGH
Loop with Unreachable Exit Condition (Infinite Loop) (CWE-835)
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
    Open HTTP/2 connection to Bandit server
  2. Delivery
    Send POST HEADERS without END_STREAM
  3. Exploit
    Drip WINDOW_UPDATE or empty SETTINGS before each timeout
  4. Execution
    Pin stream processes open across many connections
  5. Impact
    Exhaust server resources (denial of service)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Loop termination conditions
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

Exploitation requires (1) HTTP/2 enabled on the Bandit server (the default; the documented workaround is to set http_2_options: [enabled: false]), and (2) at least one route whose handler reads the request body via Plug.Conn.read_body - which Plug.Parsers performs automatically for POST, PUT and PATCH requests, so this is effectively the common case for any app accepting body payloads. No authentication, no user interaction, and no non-default configuration are needed beyond HTTP/2 being on. Limiting factors that reduce realistic exposure: only Bandit versions from 1.4.0 up to (but not including) 1.14.0 are affected; servers with HTTP/2 disabled or whose routes never read request bodies are not exploitable; and impact is confined to availability (stream/process occupancy), with no confidentiality or integrity effect.

Impact

This is a genuine availability risk that warrants prompt attention, though not an emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) and the description agree and are internally consistent: a network-reachable, unauthenticated attacker with no user interaction can trigger the flaw against low-complexity conditions, and the only impact is availability (VA:H; VC:N/VI:N) - this is a pure resource-exhaustion denial of service (CWE-835/CWE-770), not code execution or data compromise, so the headline 8.7 reflects a high-impact DoS rather than a system-takeover bug. The vuln.today decision label is 'this_week' (not act_now/emergency), which matches the picture of a serious but non-critical issue. No EPSS score was provided, so exploitation probability cannot be quantified. This CVE is NOT on CISA KEV and there is no indication of active exploitation; the GHSA advisory does, however, publish a concrete step-by-step proof-of-concept methodology (open an HTTP/2 POST stream without END_STREAM, send a 1-increment WINDOW_UPDATE every 10s, observe the stream held open for 120s versus ~15s baseline), so the mechanism is fully disclosed and trivially reproducible. The main factor that moderates real-world risk is deployment footprint: Bandit is an Elixir/Erlang HTTP server (common as the Phoenix adapter) rather than ubiquitous infrastructure, so exposure is concentrated in the Elixir ecosystem. No signals conflict here; the chief missing datum is EPSS.

Exploit ScenarioDerived

An unauthenticated remote attacker opens an HTTP/2 connection to a Bandit server and sends HEADERS for a POST request without END_STREAM, causing the application's Plug to block in read_body. The attacker then drips a single 9-byte WINDOW_UPDATE (or empty SETTINGS) frame before each read_timeout elapses, resetting the countdown and pinning the stream process - and whatever the request handler holds - open indefinitely, repeated across many streams and connections to exhaust server resources. The GHSA advisory publishes a working PoC methodology demonstrating a stream held open for 120s against a default 15s timeout.

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 attackers can hold Bandit HTTP/2 stream processes and the request-body reads they are servicing open indefinitely by sending small WINDOW_UPDATE or empty SETTINGS frames before the read timeout expires, affecting Bandit versions from 1.4.0 before 1.14.0 with HTTP/2 enabled and routes that read request bodies. Impact is availability only: request handlers and associated resources can be occupied across many streams and connections, creating denial-of-service conditions; confidentiality and integrity are not affected. Vendor-released patch: 1.14.0; no public exploit identified at time of analysis, and this is a genuine availability risk that warrants prompt attention, though not an emergency.

RemediationAI

Upgrade Bandit to 1.14.0 or later; this is the vendor-released patch and resolves the read-path timeout reset. Advisory: https://github.com/mtrudel/bandit/security/advisories/GHSA-p2qv-vx88-385x and OSV: https://osv.dev/vulnerability/EEF-CVE-2026-115269. If an immediate upgrade is not possible, the advisory documents disabling HTTP/2 with http_2_options: [enabled: false], which prevents the vulnerable read path from running; the trade-off is loss of HTTP/2 multiplexing, header compression, and related performance benefits. No other mitigation is stated in the available sources.

Affected VersionsENISA

bandit fff06efe3be962b484bd4d3eb339372fda5a231f <220b9dfd27f9a21305be2afc75cbe585ddc24e7a
bandit 1.4.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 an Elixir HTTP server built on Plug. The vulnerable path is Bandit.HTTP2.Stream.do_read_data/4 in lib/bandit/http2/stream.ex, which waits for each frame using a fresh read_timeout (default 15,000 ms). A stream WINDOW_UPDATE, or the zero-delta window update generated by an empty SETTINGS frame for every stream, satisfies the receive without delivering body data, and do_read_data/4 recurses with the same timeout, restarting the full countdown. The transport read timeout only fires when no bytes arrive, max_bytes is reduced only by DATA frames, and WINDOW_UPDATE/SETTINGS frames are not rate limited, so the read path lacks a progress-based deadline even though the send path has one. The advisory maps this to CWE-770 (allocation of resources without limits or throttling) and CWE-835 (infinite loop); no authentication or user interaction is required per the CVSS vector (PR:N/UI:N), and the defect is triggered when a Plug handler such as Plug.Parsers reads a POST/PUT/PATCH body over HTTP/2.

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

Unauthenticated network attacker (AV:N/PR:N/UI:N) against the default HTTP/2 body-read path (AC:L); availability-only resource exhaustion (A:H), no confidentiality or integrity impact, 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/2 request body reader of mtrudel bandit allows an unauthenticated remote attacker to hold stream processes open indefinitely via WINDOW_UPDATE or empty SETTINGS frames sent while a Plug reads the request body.

Bandit.HTTP2.Stream.do_read_data/4 in lib/bandit/http2/stream.ex waits for each frame with a fresh read_timeout. A stream WINDOW_UPDATE, or the zero-delta window update that every empty SETTINGS frame delivers to all streams, ends the wait without delivering any body data, and the loop starts a new full countdown. A client that sends one of these 9-byte frames before each countdown expires keeps read_body blocked, together with the stream process and whatever the application holds while reading, for as long as it likes.

This issue affects bandit: from 1.4.0 before 1.14.0.

Technical POC Analysis

Class: CWE-835 (Loop with Unreachable Exit Condition) - the advisory also files CWE-770 (Allocation of Resources Without Limits or Throttling), which better describes the resource consequence; the me…

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-115269 is a high-severity availability vulnerability in Bandit (versions 1.4.0 to 1.13.x) that allows unauthenticated remote attackers to hold HTTP/2 stream processes open indefinitely, causing denial-of-service. This can disrupt services relying on Bandit, affecting customers and internal operations, and requires prompt remediation to maintain service availability.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.6%
Top 51% exploitable
Prevalence
Medium
common Phoenix/Elixir web server adapter, but niche overall ecosystem
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