Vulnerability description

Allocation of Resources Without Limits or Throttling vulnerability in ninenines cowboy allows denial of service via unbounded buffer accumulation in multipart header parsing.

cowboy_req:read_part/3 in src/cowboy_req.erl accumulates incoming request bytes into a Buffer binary with no upper-bound check. When cow_multipart:parse_headers/2 returns more or {more, Buffer2}, the function reads up to Length bytes (default 64 KB) from the request body and recurses with the enlarged buffer. There is no equivalent of the byte_size(Acc) > Length guard present in the sibling function read_part_body/4. An unauthenticated attacker can send a multipart/form-data request whose body never yields a complete header section — for example, a body that never contains the advertised boundary delimiter, or one whose header lines never contain \r\n\r\n — and force the server process to accumulate memory linearly with the bytes the protocol layer is willing to deliver. A handful of concurrent such uploads is sufficient to exhaust BEAM memory.

This issue affects cowboy from 2.0.0 before 2.15.0.

Affected

pkg:hex/cowboy

Module Source File Routine
cowboy_req src/cowboy_req.erl cowboy_req:read_part/1
cowboy_req:read_part/2
cowboy_req:read_part/3
Status Type Version Changes / Fixed in
affected semver 2.0.0 < 2.15.0

pkg:github/ninenines/cowboy

Module Source File Routine
cowboy_req src/cowboy_req.erl cowboy_req:read_part/1
cowboy_req:read_part/2
cowboy_req:read_part/3
Status Type Version Changes / Fixed in
affected git 917cf99e10 < 5c6a2061b4

Configurations

The application must expose an HTTP endpoint that calls cowboy_req:read_part/1,2 to process multipart/form-data request bodies. Deployments that do not handle multipart uploads are not affected.

References

Credits

  • Finder: Peter Ullrich
  • Remediation developer: Loïc Hoguin

CVE record as JSON:  GET /cves/CVE-2026-8466.json
OSV record as JSON:  GET /osv/EEF-CVE-2026-8466.json