Skip to main content

mtrudel bandit EUVDEUVD-2026-26712

| CVE-2026-39805 MEDIUM
HTTP Request/Response Smuggling (CWE-444)
2026-05-01 EEF GHSA-c67r-gc9j-2qf7
6.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Recon
    Craft HTTP request with duplicate Content-Length headers
  2. Delivery
    Send through misconfigured proxy
  3. Exploit
    Proxy forwards using last header value
  4. Install
    Bandit parses using first header value
  5. C2
    Request framing desynchronizes on keep-alive connection
  6. Execute
    Remaining bytes interpreted as pipelined request
  7. Impact
    Smuggled request bypasses WAF and rate limits
  8. Step 8
    Unauthorized action executed on backend

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
Exploitation Conditions

The vulnerability requires a specific deployment topology and configuration misalignment: (1) Bandit must be deployed behind a reverse proxy or load balancer that processes duplicate Content-Length headers and selects the last value (rather than rejecting the request) - this includes certain nginx, Apache, or custom proxy configurations; (2) HTTP keep-alive connections must be enabled on both the proxy-to-Bandit link and the client-to-proxy link, allowing pipelined requests on the same connection; (3) the upstream application must process requests smuggled through the desynchronized framing without additional validation, and must lack independent rate-limiting or WAF rules at the Bandit layer. Bandit in isolation (without a problematic proxy) does NOT exhibit exploitable vulnerability - the attack requires the inconsistency between Bandit's first-value parsing and the proxy's last-value interpretation. Default Bandit configurations with compliant proxies (that reject duplicate Content-Length per RFC 9112) are NOT vulnerable. Authentication is NOT required - this is an unauthenticated network attack exploiting protocol interpretation differences.

Impact

CVSS 6.3 with AV:N/AC:L indicates network-accessible exploitation with low attack complexity, but the AT:P (Attack Timing Present) qualifier suggests timing constraints reduce real-world exploitability. The vulnerability requires precise coordination: the attacker must craft a request with two Content-Length headers with mismatched values AND position it behind a proxy that uses last-value semantics while Bandit uses first-value semantics - this is not a default HTTP behavior but rather a deployment-specific misconfiguration. EPSS data is not provided in input; however, the attack prerequisites (proxy misconfiguration + keep-alive enabled + downstream application processing smuggled requests) are common but not universal. The threat model is clear: request smuggling can bypass rate limiting, path-based access controls (e.g., /admin routes), and WAF inspection, but only when both Bandit and an upstream proxy exhibit the divergent interpretation simultaneously. The RFC 9112 compliance fix (commit f2ca636) changes Bandit to explicitly reject all duplicate Content-Length headers with a 400 error, eliminating the vulnerability entirely. This is a real issue for deployments matching the proxy-Bandit stack, but not a remote code execution or authentication bypass on Bandit alone. Risk is HIGH for affected deployments (edge proxies + Bandit); MEDIUM-LOW for general Internet-facing Bandit instances without problematic proxies.

Exploit ScenarioDerived

An attacker crafts an HTTP POST request with two Content-Length headers: 'Content-Length: 50' and 'Content-Length: 1000', followed by 1000 bytes of body data (200 bytes of legitimate request + 800 bytes of smuggled payload). The request is sent to a reverse proxy configured to use the last Content-Length value (e.g., nginx with a default or misconfigured setup). The proxy forwards the entire 1000-byte body to Bandit. Bandit reads only the first 50 bytes as the request body (using the first header), leaving 950 bytes (the smuggled payload) in the keep-alive connection buffer. When the same connection is reused, Bandit interprets the remaining 950 bytes as a new HTTP request. If the smuggled payload contains a request targeting an /admin route with elevated privileges, it bypasses WAF inspection (which only saw the original 50-byte request) and rate-limiting counters applied to the first request. This allows unauthorized actions on the backend application.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – May 01, 2026

HTTP request smuggling in mtrudel bandit before version 1.11.0 allows unauthenticated attackers to bypass edge security controls when the application sits behind a proxy that interprets duplicate Content-Length headers differently. The vulnerability stems from Bandit accepting only the first Content-Length header while proxies may use the last value, causing request framing desynchronization that enables smuggling past WAF rules, path-based ACLs, rate limiting, and audit logging. CVSS 6.3 (AV:N/AC:L/AT:P) indicates network-accessible exploitation with some attack timing complexity; no public exploit code or active KEV listing identified at analysis time, but RFC 9112 non-compliance creates a known attack pattern.

RemediationAI

Vendor-released patch: bandit 1.11.0 or later. The upstream fix modifies get_content_length/1 to reject all requests with multiple Content-Length headers (even if values are identical) by returning an error, causing Bandit to return HTTP 400 Bad Request per RFC 9112 Section 6.3. Deploy bandit 1.11.0+ immediately in all environments. For organizations unable to upgrade immediately, implement the following compensating controls: (1) Disable HTTP keep-alive on the reverse proxy layer by setting 'Connection: close' in responses, preventing pipelined request exploitation on the same connection (trade-off: increased connection overhead); (2) Configure the upstream proxy to reject requests with multiple Content-Length headers before forwarding to Bandit, e.g., using nginx 'if ($http_content_length_count > 1)' validation or equivalent WAF rules (trade-off: must maintain proxy ruleset in sync with Bandit releases); (3) Run Bandit behind a strict rate-limiting and request inspection layer that treats request smuggling attempts as attack signals (trade-off: adds operational complexity). Patch availability confirmed via GitHub commit f2ca636eb6df385219957e8934e9fc6efa1630d1.

Affected VersionsENISA

bandit 0 <1.11.0

Affected Packages

euvd bandit fix: 1.11.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

The vulnerability exists in Bandit's HTTP/1.1 header parsing logic, specifically in 'Elixir.Bandit.Headers':get_content_length/1 within lib/bandit/headers.ex. The Elixir function List.keyfind/3 returns only the first matching header when multiple Content-Length headers exist in an HTTP request, violating RFC 9112 Section 6.3 which mandates rejection of duplicate Content-Length headers as unrecoverable framing errors. When Bandit operates behind a reverse proxy (common in edge deployments), the proxy may normalize the request by selecting the last Content-Length value and forwarding it, while Bandit reads the body based on the first value. This creates a desynchronized framing state: bytes intended for the second request (as interpreted by Bandit's logic) remain in the keep-alive connection buffer and are processed as a separate pipelined HTTP request, bypassing upstream security controls that evaluated the original request. The attack leverages inconsistent HTTP semantics interpretation between two network hops - a classic request smuggling vulnerability (CWE-444).

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 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Red Hat 7.4 HIGH

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

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

Lifecycle Timeline

3
CVSS changed
May 01, 2026 - 21:22 NVD
6.3 (MEDIUM)
Patch released
May 01, 2026 - 21:01 nvd
Patch available
CVE Published
May 01, 2026 - 20:34 nvd
MEDIUM 6.3

DescriptionCVE.org

Inconsistent Interpretation of HTTP Requests vulnerability in mtrudel bandit allows HTTP request smuggling via duplicate Content-Length headers.

'Elixir.Bandit.Headers':get_content_length/1 in lib/bandit/headers.ex uses List.keyfind/3, which returns only the first matching header. When a request contains two Content-Length headers with different values, Bandit silently accepts it, uses the first value to read the body, and dispatches the remaining bytes as a second pipelined request on the same keep-alive connection. RFC 9112 §6.3 requires recipients to treat this as an unrecoverable framing error.

When Bandit sits behind a proxy that picks the last Content-Length value and forwards the request rather than rejecting it, an unauthenticated attacker can smuggle requests past edge WAF rules, path-based ACLs, rate limiting, and audit logging.

This issue affects bandit: before 1.11.0.

Threat Intelligence Overview

EPSS Score
0.0%
Top 96% exploitable
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

52
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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

CVE-2026-109584 HIGH
8.7 Oct 26

Unauthenticated remote attackers can exhaust BEAM node memory on default-configured mtrudel Bandit HTTP/2 servers (0.3.3

Vendor StatusVendor

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