Skip to content
Heist/ feed
Back to feed
MediumFix available

Chunk extensions accept bare LF and CR, enabling request smuggling in Bandit

Type: advisorySources: OSV

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

Published 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"
}