Allocation of Resources Without Limits or Throttling vulnerability in ninenines cowboy allows denial of service via unbounded buffer accumulation in multipart header parsing.
cowboyreq:readpart/3 in src/cowboyreq.erl accumulates incoming request bytes into a Buffer binary with no upper-bound check. When cowmultipart:parseheaders/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 bytesize(Acc) > Length guard present in the sibling function readpartbody/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.
The application must expose an HTTP endpoint that calls cowboyreq:readpart/1,2 to process multipart/form-data request bodies. Deployments that do not handle multipart uploads are not affected.
{
"capec_ids": [
"CAPEC-130"
],
"cpe_ids": [
"cpe:2.3:a:ninenines:cowboy:*:*:*:*:*:*:*:*"
],
"cwe_ids": [
"CWE-770"
]
}