CVE-2026-109924: undici vulnerable to Denial of Service via unbounded memory in the EventSource parser
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.
Other sources
undici is an HTTP client library for Node.js. In versions 6.5.0 through 6.29.0, 7.0.0 through 7.30.0, and 8.0.0 through 8.12.1, its 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 that the byte-based maxEventSize and maxResponseSize limits do not bound, and because maxResponseSize is enforced on the compressed body before decompression, a small compressed response can expand into enough retained memory to terminate the process. An application only needs to maintain an EventSource connection to an untrusted peer, which controls only the response, and availability is the only impact. The issue is fixed in undici 6.29.1, 7.30.1, and 8.12.2, which bound the retained parser state independently of the byte limits, and users should upgrade to one of those versions or later. There is no workaround.
— Ubuntu
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/undicito a version that resolves this vulnerability.Fixed in 8.12.2 - Upgrade
Upgrade
npm/undicito a version that resolves this vulnerability.Fixed in 7.30.1 - Upgrade
Upgrade
npm/undicito a version that resolves this vulnerability.Fixed in 6.29.1 - Upgrade
Upgrade
debian/node-undicito a version that resolves this vulnerability.Fixed in 8.12.2+dfsg+~cs3.2.3-2 - Upgrade
Upgrade
undicito a version that resolves this vulnerability.Fixed in 6.29.1 - Upgrade
Upgrade
undicito a version that resolves this vulnerability.Fixed in 7.30.1 - Upgrade
Upgrade
undicito a version that resolves this vulnerability.Fixed in 8.12.2
Event History
Frequently Asked Questions
Which applications are exposed to this issue?
Applications using an affected undici version are exposed only if they maintain an EventSource connection to an untrusted or compromised Server-Sent Events peer. The peer needs control of the HTTP response; no attacker privileges or user interaction are required.
What can an attacker do?
A malicious SSE peer can cause unbounded retained parser state and exhaust the Node.js process memory, potentially terminating the process. The stated impact is limited to availability; confidentiality and integrity are not affected.
Do the existing EventSource size limits prevent exploitation?
No. The byte-based maxEventSize and maxResponseSize limits do not bound the affected per-field and per-chunk parser state, and maxResponseSize is applied to the compressed body before decompression.
What should teams do if they use an affected release?
Upgrade undici to 6.29.1, 7.30.1, 8.12.2, or a later version in the applicable release line. No workaround is available if patching cannot be performed.