Cookie Request Header Injection via Unvalidated Encoder in cow_cookie:cookie/1
## Summary Improper Neutralization of CRLF Sequences ('CRLF Injection') vulnerability in ninenines cowlib allows HTTP request splitting and cookie smuggling via unvalidated cookie name and value fields. `cow_cookie:cookie/1` in cowlib builds a client-side `Cookie:` request header from a list of name-value pairs without validating either field. An attacker who controls the cookie names or values passed to this function can inject `;`, `,`, CR, LF, or TAB characters into the serialized header. This enables two classes of attack: cookie smuggling within a single header (e.g. injecting `; admin=1` to introduce a phantom cookie that the receiving server treats as authentic) and HTTP request header splitting (injecting CRLF to append arbitrary headers or smuggle a complete second request against a shared upstream proxy). The decoder side (`parse_cookie_name/1`, `parse_cookie_value/1`) and `setcookie/3` already validate and reject these characters; the encoder alone is missing the check. This issue affects cowlib: from 2.9.0 before 2.21.0. ## Workarounds Validate inputs into `cow_cookie:cookie/1` to only include valid cookie name and value characters as defined in RFC 6265 Section 4.1.1 before passing them to the function. ## Configurations The application must pass attacker-controlled bytes as cookie names or values to `cow_cookie:cookie/1`. Applications that construct cookie lists exclusively from trusted, application-controlled values are not affected.
- Products
- cowlib
- Affected versions
- 2.10.0, 2.10.1, 2.11.0, 2.12.0, 2.12.1, 2.13.0, 2.14.0, 2.15.0, 2.16.0, 2.16.1, 2.17.0, 2.17.1, 2.18.0, 2.19.0, 2.20.0, 2.9.0, 2.9.1
- Fixed versions
- 2.21.0
- CVEs
- CVE-2026-43969
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 28 Oct 2026, 10:41 UTC · Revision 1
Source evidence
Cookie Request Header Injection via Unvalidated Encoder in cow_cookie:cookie/1
core-osv · Original sourcePublished 11 May 2026, 18:06 UTC
## Summary Improper Neutralization of CRLF Sequences ('CRLF Injection') vulnerability in ninenines cowlib allows HTTP request splitting and cookie smuggling via unvalidated cookie name and value fields. `cow_cookie:cookie/1` in cowlib builds a client-side `Cookie:` request header from a list of name-value pairs without validating either field. An attacker who controls the cookie names or values passed to this function can inject `;`, `,`, CR, LF, or TAB characters into the serialized header. This enables two classes of attack: cookie smuggling within a single header (e.g. injecting `; admin=1` to introduce a phantom cookie that the receiving server treats as authentic) and HTTP request header splitting (injecting CRLF to append arbitrary headers or smuggle a complete second request against a shared upstream proxy). The decoder side (`parse_cookie_name/1`, `parse_cookie_value/1`) and `setcookie/3` already validate and reject these characters; the encoder alone is missing the check. This issue affects cowlib: from 2.9.0 before 2.21.0. ## Workarounds Validate inputs into `cow_cookie:cookie/1` to only include valid cookie name and value characters as defined in RFC 6265 Section 4.1.1 before passing them to the function. ## Configurations The application must pass attacker-controlled bytes as cookie names or values to `cow_cookie:cookie/1`. Applications that construct cookie lists exclusively from trusted, application-controlled values are not affected.
osv:EEF-CVE-2026-43969
cowlib
Fixed versions: 2.21.0
Complete source record
{
"id": "a4df59f85d163514b3fc0f70eea1f143d4dba120d072ec7fa59bbb8a8c60c42f",
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-43969",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Cookie Request Header Injection via Unvalidated Encoder in cow_cookie:cookie/1",
"summary": "## Summary Improper Neutralization of CRLF Sequences ('CRLF Injection') vulnerability in ninenines cowlib allows HTTP request splitting and cookie smuggling via unvalidated cookie name and value fields. `cow_cookie:cookie/1` in cowlib builds a client-side `Cookie:` request header from a list of name-value pairs without validating either field. An attacker who controls the cookie names or values passed to this function can inject `;`, `,`, CR, LF, or TAB characters into the serialized header. This enables two classes of attack: cookie smuggling within a single header (e.g. injecting `; admin=1` to introduce a phantom cookie that the receiving server treats as authentic) and HTTP request header splitting (injecting CRLF to append arbitrary headers or smuggle a complete second request against a shared upstream proxy). The decoder side (`parse_cookie_name/1`, `parse_cookie_value/1`) and `setcookie/3` already validate and reject these characters; the encoder alone is missing the check. This issue affects cowlib: from 2.9.0 before 2.21.0. ## Workarounds Validate inputs into `cow_cookie:cookie/1` to only include valid cookie name and value characters as defined in RFC 6265 Section 4.1.1 before passing them to the function. ## Configurations The application must pass attacker-controlled bytes as cookie names or values to `cow_cookie:cookie/1`. Applications that construct cookie lists exclusively from trusted, application-controlled values are not affected.",
"evidence": "osv:EEF-CVE-2026-43969",
"products": [
{
"name": {
"value": "cowlib",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.21.0",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": [
{
"value": "2.10.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.10.1",
"evidence": "/affected/0/versions"
},
{
"value": "2.11.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.12.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.12.1",
"evidence": "/affected/0/versions"
},
{
"value": "2.13.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.14.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.15.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.16.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.16.1",
"evidence": "/affected/0/versions"
},
{
"value": "2.17.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.17.1",
"evidence": "/affected/0/versions"
},
{
"value": "2.18.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.19.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.20.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.9.0",
"evidence": "/affected/0/versions"
},
{
"value": "2.9.1",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "low",
"structured": {
"id": "EEF-CVE-2026-43969",
"aliases": [
"CVE-2026-43969",
"EEF-CVE-2026-43969",
"GHSA-g2wm-735q-3f56"
],
"metrics": [
{
"type": "CVSS_V4",
"score": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "2.9.0"
},
{
"fixed": "2.21.0"
}
]
}
],
"package": {
"name": "cowlib",
"purl": "pkg:hex/cowlib",
"ecosystem": "Hex"
},
"versions": [
"2.10.0",
"2.10.1",
"2.11.0",
"2.12.0",
"2.12.1",
"2.13.0",
"2.14.0",
"2.15.0",
"2.16.0",
"2.16.1",
"2.17.0",
"2.17.1",
"2.18.0",
"2.19.0",
"2.20.0",
"2.9.0",
"2.9.1"
],
"database_specific": {
"source": "https://cna.erlef.org/osv/EEF-CVE-2026-43969.json"
}
},
{
"ranges": [
{
"repo": "https://github.com/ninenines/cowlib",
"type": "GIT",
"events": [
{
"introduced": "f017f8a0ecbffd5033d9ab49bf180186f7a523a7"
},
{
"fixed": "c17fd73945ef536cccecc492d286fb6b6d1c3307"
}
]
}
],
"versions": [
"2.20.0",
"2.19.0",
"2.18.0",
"2.17.1",
"2.17.0",
"2.16.1",
"2.16.0",
"2.15.0",
"2.14.0",
"2.13.0",
"2.12.1",
"2.12.0",
"2.11.0",
"2.10.1",
"2.10.0",
"2.9.1",
"2.9.0"
],
"database_specific": {
"source": "https://cna.erlef.org/osv/EEF-CVE-2026-43969.json"
}
}
],
"modified": "2026-10-09T07:00:03.523201772Z",
"provider": "osv",
"references": [
"https://github.com/erlef/cowlib/commit/177953dd51540da11090666c1f007214127a1144",
"https://cna.erlef.org/cves/CVE-2026-43969.html",
"https://github.com/ninenines/cowlib/commit/f017f8a0ecbffd5033d9ab49bf180186f7a523a7",
"https://github.com/ninenines/cowlib/commit/c17fd73945ef536cccecc492d286fb6b6d1c3307",
"https://hex.pm/packages/cowlib"
],
"provider_metadata": {
"cpe_ids": [
"cpe:2.3:a:ninenines:cowlib:*:*:*:*:*:*:*:*"
],
"cwe_ids": [
"CWE-93"
],
"capec_ids": [
"CAPEC-105"
]
}
},
"related_cves": [
{
"value": "CVE-2026-43969",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 108720,
"published_at": "2026-05-11T18:06:40.667+00:00"
}