CVE-2026-43966
MediumCVSS 5.3Exploitation Probability (EPSS)
Low risk24th percentile - higher than 24% of all known CVEs
Summary
A CRLF injection vulnerability in cowlib version 2.9.0 allows HTTP response splitting due to improper neutralization of non-VCHAR bytes in structured HTTP header values. The escape_string/2 function fails to escape CR and LF characters, enabling attackers to inject new headers into HTTP responses.
Risk Assessment
Attackers can manipulate HTTP responses, potentially leading to cache poisoning, session hijacking, or cross-site scripting (XSS) attacks against users of applications using cowlib.
Recommendation
Upgrade cowlib to version 2.9.1 or later, which properly neutralizes CRLF sequences in structured header values.
Other vulnerabilities in cowlib
See all- CVE-2026-43970High
CVE-2026-43970 is a vulnerability related to improper handling of highly compressed data in the cowlib library, which can lead to remote denial of service attacks via memory exhaustion. It allows unauthenticated users to send specially crafted SPDY frames that can cause significant memory consumption.
- CVE-2026-43971Medium
Improper Encoding or Escaping of Output vulnerability in ninenines cowlib allows Link header directive smuggling via unescaped special characters in cow_link:link/1. cow_link:do_link/1 in cowlib interpolates the target URI, rel value, and attribute keys directly into the serialized Link: header value without escaping or token-grammar validation. A > byte in target prematurely closes the URI slot, allowing an attacker to append additional link entries with attacker-chosen rel directives. A " or \ in rel escapes the quoted string and opens new parameters. Any byte — including whitespace, =, and " — in an attribute key is emitted verbatim. Because browsers act on Link: directives such as rel="preconnect", rel="preload", and rel="prerender", an attacker who can influence these fields in an application that round-trips parsed Link headers through cow_link:link/1 can force victim browsers to make out-of-band connections to attacker-controlled origins. This issue affects cowlib: from 2.9.0 onward.
- CVE-2026-59248High
A vulnerability in the cowlib library allows an unauthenticated remote attacker to exhaust memory on a vulnerable server or client by sending specially crafted HTTP/2 or HTTP/3 frames. The issue stems from missing limits in the HPACK and QPACK decoder, which processes arbitrarily long prefixed integers, causing large bignum allocations and heavy garbage collection churn.
- CVE-2026-43969Low
CRLF Injection vulnerability in cowlib allows HTTP request splitting and cookie smuggling via unvalidated cookie name and value fields. The cow_cookie:cookie/1 function builds a Cookie header without validation, allowing an attacker to inject ;, ,, CR, LF, or TAB characters.
Original NVD description (English source)
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.

