Skip to main content

Bandit EUVDEUVD-2026-102317

| CVE-2026-105660 MEDIUM
Improper Validation of Syntactic Correctness of Input (CWE-1286)
2026-10-15 EEF
6.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Send HTTP/1 request with absolute-form or authority-form target
  2. Delivery
    Target authority overrides validated Host header (RFC 9112)
  3. Exploit
    determine_host_and_port!/4 sets conn.host/conn.port unchecked
  4. Execution
    Application emits absolute URLs with attacker-chosen authority
  5. Impact
    Victim follows spoofed link (phishing/redirect)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Hardware access control granularity
Exploitation Conditions

No authentication, user interaction, or non-default Bandit configuration is required to inject the tainted authority - a remote unauthenticated request against a default Bandit deployment suffices, because RFC 9112 mandates that an absolute-form/authority-form request-target authority override the Host header, and Bandit passed it through unchecked. The HTTP/1.0 clause needs no Host header at all, and CONNECT places the raw port string in conn.port. The SECURITY IMPACT, however, is conditional: it only materializes when the hosting application builds absolute URLs from conn.host/conn.port (e.g. Plug.Conn.request_url/1, Phoenix URL/email link helpers) and uses them in a security-relevant way; apps that never derive URLs from the request authority are not affected. Strong limiting factors: message framing is unaffected, and no CR or LF byte can reach conn.host, so this cannot be used for HTTP request smuggling or response-header/CRLF injection. Affected versions: bandit 0.6.0 up to (not including) 1.13.0.

Impact

The vendor-supplied CVSS 4.0 score is 6.9 (Medium) with vector AV:N/AC:L/AT:N/PR:N/UI:N and impact limited to VI:L (low integrity) - no confidentiality (VC:N) or availability (VA:N) impact. The attack surface is trivially reachable: any remote, unauthenticated client can send a crafted request target over HTTP/1, so AC:L/PR:N/UI:N are well justified. However, the real-world severity hinges entirely on downstream behavior: the flaw only matters when the hosting application builds and trusts absolute URLs derived from conn.host/conn.port (e.g. Plug.Conn.request_url/1 or Phoenix URL helpers) for security-relevant links or redirects - making this effectively an open-redirect / link-poisoning / host-spoofing primitive rather than code execution or data exposure. No EPSS score, CISA KEV listing, or public POC is present in the provided data, so there is no evidence of active or at-scale exploitation. CONFLICTING SIGNAL: the input Tag 'Information Disclosure' is inconsistent with the vendor vector, which explicitly sets VC:N (no confidentiality impact) - the actual impact is integrity/spoofing of generated URLs, not disclosure; treat the tag with caution. Overall this is a legitimate but moderate-priority defense-in-depth fix: patch during normal cycles, prioritizing Phoenix/Plug apps that emit URLs from the request authority.

Exploit ScenarioDerived

A remote unauthenticated attacker sends an HTTP/1.1 request with an absolute-form target such as 'GET http://good.example@evil.example/x HTTP/1.1' plus a valid Host header; per RFC 9112 the request-target authority takes precedence, so Bandit sets conn.host to 'good.example@evil.example' without validation. In a Phoenix app that generates a password-reset or confirmation link via URL helpers, the emitted link now points at the attacker-chosen authority, enabling phishing or token redirection. No public exploit code is identified at time of analysis, though the request line itself is the entire payload and trivial to reproduce.

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

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

Alert me

AnalysisAIv1 – Oct 15, 2026

Bandit versions 0.6.0 up to (but not including) 1.13.0 pass an attacker-supplied authority from HTTP/1 absolute-form and authority-form request targets straight into conn.host and conn.port without validating it against the RFC 3986 host grammar, so an unauthenticated remote request such as 'GET http://good.example@evil.example/x HTTP/1.1' overrides the Host header that Bandit does check. The real-world impact is narrow and conditional: it only matters when the hosting Elixir/Phoenix application builds absolute URLs from conn.host/conn.port (Plug.Conn.request_url/1, Phoenix URL helpers) and then uses those URLs in a security-relevant way, and because message framing is untouched and no CR or LF byte can reach conn.host, it cannot be turned into request smuggling or CRLF/response-header injection. The vendor rates this CVSS 4.0 6.9 (Medium) with only low integrity impact (VI:L, no confidentiality or availability loss); no public exploit code or confirmed active exploitation has been identified at time of analysis (no public exploit identified at time of analysis).

RemediationAI

Vendor-released patch: upgrade Bandit to 1.13.0 or later, which contains the upstream fixes in commit 6ea80210137b3f69caf65f67398934259dc365d0 and commit 0e3edda0edf6322e9164b827c6d3ddecd080ff2e (see advisory GHSA-v53v-9hvg-37jf at https://github.com/mtrudel/bandit/security/advisories/GHSA-v53v-9hvg-37jf and the CNA record at https://cna.erlef.org/cves/CVE-2026-105660.html); the patched releases reject non-absolute paths, schemeURI and unsupported request targets with 400 Bad Request and build the request URI from decoded components. If an immediate upgrade is not possible, note that the security impact only materializes for applications that derive absolute URLs from conn.host/conn.port, so the most effective compensating control is to stop trusting the request authority: configure the Phoenix endpoint with an explicit url: [host: ..., port: ...] (or the equivalent Plug-level setting) so Plug.Conn.request_url/1 and Phoenix URL helpers emit a static authority - the trade-off being that legitimate virtual-host or multi-tenant deployments will generate links to the configured host rather than the requested host, and per-tenant link generation must then be done explicitly. A narrower stopgap is to insert a plug ahead of routing that rejects or rewrites requests whose conn.host fails an RFC 3986 host allowlist and that rejects CONNECT targets bearing non-numeric or out-of-range ports, accepting additional per-request validation overhead and possible false positives for unusual but legitimate hostnames. Host-header validation alone is not sufficient, because RFC 9112 legitimately gives an absolute-form authority precedence; conversely, no CRLF can reach conn.host and framing is unaffected, so smuggling-oriented mitigations such as strict Transfer-Encoding/Content-Length handling are unnecessary for this specific issue.

Affected VersionsENISA

bandit 0.6.0 <1.13.0
bandit 0e3edda0edf6322e9164b827c6d3ddecd080ff2e <6ea80210137b3f69caf65f67398934259dc365d0

Affected Packages

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

HTTP/1 request targets come in four forms defined by RFC 9112 §3.2 - origin-form (abs_path, e.g. '/x'), absolute-form (absoluteURI, e.g. 'http://host:port/x'), authority-form (used with CONNECT, 'host:port') and asterisk-form ('*'). Erlang's :erlang.decode_packet/3 surfaces these as distinct tuples, but the affected Bandit code flattened them all into a single 'path' value and let Bandit.HTTP1.Handler build a URI by string interpolation ('#{scheme}://#{host}#{path}') and Bandit.Pipeline.determine_host_and_port!/4 (lib/bandit/pipeline.ex) forward the result unchecked. That is a CWE-1286 improper-validation-of-syntactic-correctness-of-input flaw: because RFC 9112 requires an authority present in an absolute-form target to take precedence over the Host header, the pre-1.13.0 implementation validated only the Host header and then accepted the attacker's authority verbatim, yielding conn.host values such as 'good.example@evil.example' and admitting NUL, DEL and non-ASCII bytes, invalid IP literals and port numbers outside 1..65535. HTTP/1.0 requests need no Host header at all, and CONNECT places the raw, unparsed port string into conn.port. The upstream fix (commits 6ea80210137b3f69caf65f67398934259dc365d0 and 0e3edda0edf6322e9164b827c6d3ddecd080ff2e) introduces resolve_request_target/1 and build_uri/3 in Bandit.HTTP1.Adapter so each request-target form is decoded separately, unsupported forms (notably schemeURI) and non-absolute paths are answered with 400 Bad Request, and the URI is constructed from the parsed components rather than a raw concatenation. Notably, no CR or LF byte can reach conn.host and message framing is unaffected, which is why the assessed CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) caps the impact at low integrity rather than enabling smuggling.

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.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Remote, unauthenticated, no user interaction (AV:N/AC:L/PR:N/UI:N); only low integrity impact (I:L) from attacker-tainted host/port propagating into app-generated URLs; no confidentiality or availability loss and no CRLF/scope change.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/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
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Improper Validation of Syntactic Correctness of Input vulnerability in mtrudel bandit allows an unauthenticated remote attacker to set conn.host and conn.port to values outside the RFC 3986 host grammar via the authority of an HTTP/1 absolute-form or authority-form request target. Bandit validates the Host header and answers 400 when it is malformed, but when the request target carries its own authority that authority takes precedence, as RFC 9112 requires, and Bandit.Pipeline.determine_host_and_port!/4 in lib/bandit/pipeline.ex passes it to the application unchecked. A request line such as GET http://good.example@evil.example/x HTTP/1.1 with a valid Host header yields a conn.host of good.example@evil.example, and the same path admits NUL, DEL and non-ASCII bytes, invalid IP literals and ports outside 1..65535. The HTTP/1.0 clause needs no Host header at all, and CONNECT places the unparsed port string in conn.port.

Applications that build absolute URLs from conn.host, such as through Plug.Conn.request_url/1 or Phoenix URL helpers, emit links whose authority the attacker chose. Message framing is unaffected, and no CR or LF can reach conn.host.

This issue affects bandit: from 0.6.0 before 1.13.0.

Threat Intelligence Overview

EPSS Score
0.5%
Top 60% exploitable
Prevalence
Low
Elixir-only Plug/Phoenix HTTP server, niche-ecosystem production footprint
Data Quality
6 sources
Confidence: High

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 No
EPSS 0.5%
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

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

Attack Technique

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