Skip to content
Heist/ feed
Back to feed
LowFix available

Cookie Request Header Injection via Unvalidated Encoder in cow_cookie:cookie/1

Type: advisorySources: OSV

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

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