Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen HTTP/2 connection to Bandit server
-
DeliverySend POST HEADERS without END_STREAM
-
ExploitDrip WINDOW_UPDATE or empty SETTINGS before each timeout
-
ExecutionPin stream processes open across many connections
-
ImpactExhaust 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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 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
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
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.
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 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
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.
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
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-109819
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB