CVE-2026-39805: CL.CL HTTP request smuggling via duplicate Content-Length in bandit
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.
Security readout for executives and security teams
Plain-English summary
Bandit may misread requests containing conflicting Content-Length headers. In certain proxy deployments, attackers could conceal a second request from edge security controls, potentially bypassing WAF rules, access controls, rate limits, and audit logging. The supplied description identifies Bandit versions before 1.11.0 as affected.
Executive priority
Treat this as a prompt remediation item for exposed Bandit services behind proxies, especially where edge controls enforce authorization or protect sensitive paths. It is not supported as an emergency active-exploitation event, but successful abuse could undermine multiple preventive and detective controls simultaneously.
Technical view
Bandit uses the first matching Content-Length header instead of rejecting conflicting duplicates as required by RFC 9112. If an upstream proxy uses the last value, Bandit can treat leftover body bytes as another request on the same persistent connection, creating CL.CL request smuggling.
Likely exposure
Exposure requires Bandit before 1.11.0 and a front-end proxy that accepts conflicting Content-Length headers while interpreting them differently. Internet-facing applications behind WAFs, reverse proxies, or path-based controls deserve prompt review. Direct Bandit deployments without such parsing disagreement may have lower practical exposure.
Exploitation context
The attack is unauthenticated and network-accessible but requires a particular proxy-to-Bandit parsing mismatch. The bundle reports CVSS 4.0 score 6.3 and does not identify CISA KEV listing or evidence of active exploitation.
Researcher notes
The issue is CWE-444 request smuggling caused by inconsistent message framing. The narrative scope says versions before 1.11.0 are affected, while the supplied structured affected entries appear inconsistent and default to unaffected. Confirm exact package and version applicability against the vendor advisory and patch.
Mitigation direction
Upgrade Bandit to version 1.11.0 or later after compatibility testing.
Configure upstream proxies to reject requests containing conflicting Content-Length headers.
Review vendor guidance and the referenced patch before applying compensating controls.
Prioritize internet-facing services where edge controls protect sensitive or privileged routes.
Validation and detection
Inventory applications and confirm their deployed Bandit versions.
Identify every proxy, load balancer, CDN, or WAF positioned before Bandit.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-444: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-444 · source CWE mapping
Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')
Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.