undici vulnerable to Denial of Service via unbounded memory in the EventSource parser
Affected releases · undici
- 8.x8.0.0 – 8.12.1Fixed in 8.12.2
- 7.x7.0.0 – 7.30.0Fixed in 7.30.1
- 6.x6.5.0 – 6.29.0Fixed in 6.29.1
On 8.x, the newest line:
npm install undici@8.12.2Affected
8.0.0 – 8.12.1
22 releases
Fixed
8.12.2 – 8.12.3
2 releases, latest
Affected
7.0.0 – 7.30.0
50 releases
Fixed
7.30.1
1 release
Not affected
6.0.0 – 6.4.0
7 releases
Affected
6.5.0 – 6.29.0
49 releases
Fixed
6.29.1
1 release
Is your project affected?
Paste your package.json, or type the range you declare for undici. It is read in your browser and sent nowhere.
What happens
Impact
undici's EventSource client can be driven to exhaust process memory by a malicious or compromised Server-Sent Events peer. By sending millions of tiny completed data: fields with no blank event separator, or a single unfinished line split across many chunks, the parser retains a growing amount of per-field and per-chunk state. The byte-based maxEventSize and maxResponseSize limits do not bound that retained state, and maxResponseSize is enforced on the compressed body before decompression, so a small compressed response can expand into enough retained memory to terminate the process. The application only needs to maintain an EventSource connection to an untrusted peer, which controls only the response. Availability is the only impact.
Patches
Upgrade to 6.29.1, 7.30.1, or 8.12.2, which bound the retained EventSource parser state (the number of data fields and buffered chunks, the unfinished-line length, and per-field byte totals) independently of the byte limits.
Workarounds
None.