Vulnerability advisory

CVE-2026-43966

HTTP Response Splitting via Non-VCHAR Bytes in cow_http_struct_hd:escape_string/2

Published Updated OSV record ↗

Also known as EEF-CVE-2026-43966GHSA-w4f7-4cxr-rv3c

Severity
  • CVSS 4.0CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N

Affected versions

Repository

Affected commitsFixed by commit
GIT github.com/ninenines/cowboy ↗
All commits before f77cb9b5e730e300fffb551db1ba5d1c4ed878eff77cb9b5e730e300fffb551db1ba5d1c4ed878ef
GIT github.com/ninenines/cowlib ↗
b34155f725245848dca3a505398e262b1d50f25b to before aca0ad953417b29bab2c41eeb4c37c98606c848baca0ad953417b29bab2c41eeb4c37c98606c848b
Not specified4401b858f2229abb3ea115c60924f6c77e5f8aa3
Not specifieda8b793db3d6ffe91d62f81baf41b1dab4cd78fb6
GIT github.com/ninenines/gun ↗
All commits before 4f35609eb37109b106a863fc9ba83d7ee64e3e424f35609eb37109b106a863fc9ba83d7ee64e3e42
Also listed as affected (64)
  • 2.15.0
  • 2.14.2
  • 2.14.1
  • 2.14.0
  • 2.13.0
  • 2.12.0
  • 2.11.0
  • 2.10.0
  • 2.9.0
  • 2.8.0
  • 2.7.0
  • 2.6.3
  • 2.6.2
  • 2.6.1
  • 2.6.0
  • 2.5.0
  • 2.4.0
  • 2.3.0
  • 2.2.2
  • 2.2.1
  • 2.2.0
  • 2.1.0
  • 2.0.0
  • 2.0.0-rc.4
  • 2.0.0-rc.3
  • 2.0.0-rc.2
  • 2.0.0-rc.1
  • 2.0.0-pre.10
  • 2.0.0-pre.9
  • 2.0.0-pre.8
  • 2.0.0-pre.7
  • 2.0.0-pre.6
  • 2.0.0-pre.5
  • 2.0.0-pre.4
  • 2.0.0-pre.3
  • 2.0.0-pre.2
  • 2.0.0-pre.1
  • 1.0.0
  • 0.10.0
  • 0.9.0
  • 0.8.6
  • 0.8.5
  • 0.8.4
  • 0.8.3
  • 0.8.2
  • 0.8.1
  • 0.8.0
  • 0.6.1
  • 0.6.0
  • 0.4.0
  • 0.2.0
  • 2.12.1
  • 2.10.1
  • 2.9.1
  • 2.0.1
  • 1.3.0
  • 1.2.0
  • 1.1.0
  • 1.0.0-rc.1
  • 1.0.0-pre.5
  • 1.0.0-pre.4
  • 1.0.0-pre.3
  • 1.0.0-pre.2
  • 1.0.0-pre.1

Description

Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Request/Response Splitting') vulnerability in ninenines cowlib allows HTTP response splitting via non-VCHAR bytes in structured-fields string values.

cow_http_struct_hd:escape_string/2 in cowlib only escapes \ and ", passing all other bytes through verbatim. This creates an encoder/decoder asymmetry: the matching parser accepts only printable ASCII (0x20–0x7E, excluding " and ), but the encoder emits any byte including CR and LF. An application that builds a structured HTTP header via cow_http_struct_hd:item/1 (or a higher-level wrapper such as cow_http_hd:wt_protocol/1) from attacker-controlled input can have \r\n injected into the serialized header value. Once on the wire, the injected CRLF terminates the current header and any following bytes are interpreted as a new header, enabling HTTP response splitting.

This issue affects cowlib: from 2.9.0 onward.

References

  • Codex
  • Claude Code
  • VS Code
  • GitHub Copilot
  • Cursor
  • Cline
  • Windsurf
  • Google Anti-gravity
  • OpenCode
  • Pi
  • Gemini CLI
  • Hermes Agent
  • Zed
  • Junie
  • Qwen Code
  • Kiro
  • Kilo Code
  • Factory Droid

Set up GitHits for your agents

Run this command:

<> bash
npx githits@latest init

What happens next:

  1. Opens your browser to authorize GitHits
  2. Asks whether to set up GitHits at the user or project level
  3. Detects your supported AI coding tools
  4. Lets you choose which tools to configure
  5. Configures the selected tools