Chunk extensions accept bare LF and CR, enabling request smuggling in Bandit
## Summary Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') vulnerability in the HTTP/1.1 chunked body reader of mtrudel bandit allows an unauthenticated remote attacker to smuggle a second request past a front-end proxy via a chunk extension that contains a bare LF. The chunked reader in `lib/bandit/http1/socket.ex` takes the chunk-size line to be everything up to the first CRLF and discards everything after `;` without checking it against the RFC 9112 `chunk-ext` grammar, so bare LF, bare CR and other control bytes pass. A proxy that ends the size line at a bare LF reads `2;\nxx\r\n40\r\n...` as one request whose second chunk holds a `GET /admin`, while Bandit ends the body early and dispatches `GET /admin` as a separate pipelined request. Deployments without such a proxy in front of Bandit are not affected. This issue affects bandit: from 1.12.4 before 1.14.0. ## Details **1. Unchecked extension.** In `lib/bandit/http1/socket.ex`, the chunked body reader takes the chunk-size line to be everything up to the first CRLF. Anything after `;` is thrown away without being checked against the RFC 9112 §7.1.1 `chunk-ext` grammar, so bare LF, bare CR and other control bytes are accepted. The 16-byte size-line cap does not help, because the payload needs only 5 bytes. **2. Bandit's reading.** For the body `2;\nxx\r\n40\r\n0\r\n\r\nGET /admin ...`, Bandit takes `2;\nxx` as the size line and `40` as the 2-byte chunk, and the embedded `0\r\n\r\n` ends the
- Products
- bandit
- Affected versions
- 1.12.4, 1.12.5, 1.13.0, 1.13.1
- Fixed versions
- 1.14.0
- CVEs
- CVE-2026-114216
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 14:47 UTC · Revision 1
Source evidence
Chunk extensions accept bare LF and CR, enabling request smuggling in Bandit
core-osv · Original sourcePublished 26 Oct 2026, 13:30 UTC
## Summary Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') vulnerability in the HTTP/1.1 chunked body reader of mtrudel bandit allows an unauthenticated remote attacker to smuggle a second request past a front-end proxy via a chunk extension that contains a bare LF. The chunked reader in `lib/bandit/http1/socket.ex` takes the chunk-size line to be everything up to the first CRLF and discards everything after `;` without checking it against the RFC 9112 `chunk-ext` grammar, so bare LF, bare CR and other control bytes pass. A proxy that ends the size line at a bare LF reads `2;\nxx\r\n40\r\n...` as one request whose second chunk holds a `GET /admin`, while Bandit ends the body early and dispatches `GET /admin` as a separate pipelined request. Deployments without such a proxy in front of Bandit are not affected. This issue affects bandit: from 1.12.4 before 1.14.0. ## Details **1. Unchecked extension.** In `lib/bandit/http1/socket.ex`, the chunked body reader takes the chunk-size line to be everything up to the first CRLF. Anything after `;` is thrown away without being checked against the RFC 9112 §7.1.1 `chunk-ext` grammar, so bare LF, bare CR and other control bytes are accepted. The 16-byte size-line cap does not help, because the payload needs only 5 bytes. **2. Bandit's reading.** For the body `2;\nxx\r\n40\r\n0\r\n\r\nGET /admin ...`, Bandit takes `2;\nxx` as the size line and `40` as the 2-byte chunk, and the embedded `0\r\n\r\n` ends the
osv:EEF-CVE-2026-114216
bandit
Fixed versions: 1.14.0
Complete source record
{
"id": "6ec7cf0f6a90042d2d85c6a7fb7a2fbc5f99fa28c35b535c76447d36c4825473",
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-114216",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Chunk extensions accept bare LF and CR, enabling request smuggling in Bandit",
"summary": "## Summary Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling') vulnerability in the HTTP/1.1 chunked body reader of mtrudel bandit allows an unauthenticated remote attacker to smuggle a second request past a front-end proxy via a chunk extension that contains a bare LF. The chunked reader in `lib/bandit/http1/socket.ex` takes the chunk-size line to be everything up to the first CRLF and discards everything after `;` without checking it against the RFC 9112 `chunk-ext` grammar, so bare LF, bare CR and other control bytes pass. A proxy that ends the size line at a bare LF reads `2;\\nxx\\r\\n40\\r\\n...` as one request whose second chunk holds a `GET /admin`, while Bandit ends the body early and dispatches `GET /admin` as a separate pipelined request. Deployments without such a proxy in front of Bandit are not affected. This issue affects bandit: from 1.12.4 before 1.14.0. ## Details **1. Unchecked extension.** In `lib/bandit/http1/socket.ex`, the chunked body reader takes the chunk-size line to be everything up to the first CRLF. Anything after `;` is thrown away without being checked against the RFC 9112 §7.1.1 `chunk-ext` grammar, so bare LF, bare CR and other control bytes are accepted. The 16-byte size-line cap does not help, because the payload needs only 5 bytes. **2. Bandit's reading.** For the body `2;\\nxx\\r\\n40\\r\\n0\\r\\n\\r\\nGET /admin ...`, Bandit takes `2;\\nxx` as the size line and `40` as the 2-byte chunk, and the embedded `0\\r\\n\\r\\n` ends the",
"evidence": "osv:EEF-CVE-2026-114216",
"products": [
{
"name": {
"value": "bandit",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.14.0",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "1.12.4",
"evidence": "/affected/0/versions"
},
{
"value": "1.12.5",
"evidence": "/affected/0/versions"
},
{
"value": "1.13.0",
"evidence": "/affected/0/versions"
},
{
"value": "1.13.1",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "medium",
"structured": {
"id": "EEF-CVE-2026-114216",
"aliases": [
"CVE-2026-114216",
"EEF-CVE-2026-114216",
"GHSA-w5wc-g2hc-g7m2"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "1.12.4"
},
{
"fixed": "1.14.0"
}
]
}
],
"package": {
"name": "bandit",
"purl": "pkg:hex/bandit",
"ecosystem": "Hex"
},
"versions": [
"1.12.4",
"1.12.5",
"1.13.0",
"1.13.1"
],
"database_specific": {
"source": "https://cna.erlef.org/osv/EEF-CVE-2026-114216.json"
}
},
{
"ranges": [
{
"repo": "https://github.com/mtrudel/bandit",
"type": "GIT",
"events": [
{
"introduced": "c31e9e3c76dcbfc239a96eabed5341ced7885ae5"
},
{
"fixed": "220b9dfd27f9a21305be2afc75cbe585ddc24e7a"
}
]
}
],
"versions": [
"1.13.1",
"1.13.0",
"1.12.5",
"1.12.4"
],
"database_specific": {
"source": "https://cna.erlef.org/osv/EEF-CVE-2026-114216.json"
}
}
],
"modified": "2026-10-26T13:56:06.651337148Z",
"provider": "osv",
"references": [
"https://github.com/mtrudel/bandit/security/advisories/GHSA-w5wc-g2hc-g7m2",
"https://cna.erlef.org/cves/CVE-2026-114216.html",
"https://github.com/mtrudel/bandit/commit/c31e9e3c76dcbfc239a96eabed5341ced7885ae5",
"https://github.com/mtrudel/bandit/commit/220b9dfd27f9a21305be2afc75cbe585ddc24e7a",
"https://hex.pm/packages/bandit"
],
"provider_metadata": {
"cpe_ids": [
"cpe:2.3:a:mtrudel:bandit:*:*:*:*:*:*:*:*"
],
"cwe_ids": [
"CWE-444"
],
"capec_ids": [
"CAPEC-33"
]
}
},
"related_cves": [
{
"value": "CVE-2026-114216",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 454169,
"published_at": "2026-10-26T13:30:41.225+00:00"
}