CVE-2026-8468

Unbounded buffer accumulation in multipart header parsing causes denial of service in plug

HIGH
8.2
CVSS Score
Published: May 14, 2026 at 10:29 AM UTC
Updated: June 17, 2026 at 11:03 AM UTC
2 products affected across 2 vendorsPlugPlug

Using plug by elixir-plug?

Get instant alerts when new vulnerabilities affect plug - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH8.2
Exploit prediction
EPSS 0.6%
SSVC
No known exploit

Description

Allocation of Resources Without Limits or Throttling vulnerability in plug_project plug allows denial of service via unbounded buffer accumulation in multipart header parsing. plug_multipart in src/plug_multipart.erl is a fork of the cow_multipart module from ninenines cowboy (CVE-2026-8466). The same unbounded accumulation pattern is present in 'Elixir.Plug.Conn':read_part_headers/2 in lib/plug/conn.ex: it accumulates incoming request bytes into a growing binary with no upper-bound check. When plug_multipart:parse_headers/2 returns more or {more, Buffer}, the function reads up to 64 KB from the underlying socket 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/8. 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 plug from 1.4.0 before 1.15.4, 1.16.3, 1.17.1, 1.18.2, and 1.19.2.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

1.16.0 ≤ v < 1.16.31.17.0 ≤ v < 1.17.11.18.0 ≤ v < 1.18.21.19.0 ≤ v < 1.19.21.4.0 ≤ v < 1.15.4
Affected range stops below 1.15.4, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.16.3, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.17.1, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.18.2, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.19.2, so it looks safe — our inference, not a vendor statement
1.16.0 ≤ v < 1.16.31.17.0 ≤ v < 1.17.11.18.0 ≤ v < 1.18.21.19.0 ≤ v < 1.19.21.4.0 ≤ v < 1.15.41.16.01.17.01.18.01.19.01.4.0c52b2f32c90bccd718202bafccb5f95594e30183
Affected range stops below 1.15.4, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.16.3, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.17.1, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.18.2, so it looks safe — our inference, not a vendor statement
Affected range stops below 1.19.2, so it looks safe — our inference, not a vendor statement

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

8.2HIGHEEF
Vector?

Quick Info

StatusDEFERRED
CWE
CWE-770

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card