{"id":"CVE-2026-69210","aliases":["EUVD-2026-79192","GHSA-3j86-pj9g-jchr"],"status":"published","title":"Http4s: WebSocket decoder accepts negative length, causing infinite decode loop","description":"Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, WebSocket FrameTranscoder.bodyLength rejects extended payload lengths above Integer.MAX_VALUE but permits negative 64-bit lengths. A remote client that completes a WebSocket handshake through an Ember server can send such a frame, causing the decoder to return an empty frame without advancing its input. The decode loop then runs indefinitely, pins a worker at full CPU, and grows an ArrayBuffer without bound, resulting in denial of service. This issue is fixed in versions 0.23.35 and 1.0.0-M47.","severity":{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.0063,"percentile":0.50471,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":false},"cwes":["CWE-1284","CWE-835"],"published":"2026-09-15T19:19:04Z","modified":"2026-10-28T02:30:29Z","products":[{"vendor":"http4s","product":"http4s"}],"references":[{"url":"https://github.com/http4s/http4s/security/advisories/GHSA-3j86-pj9g-jchr","tags":["x_refsource_CONFIRM","advisory"]},{"url":"https://github.com/http4s/http4s/commit/c7d3ef90dc2ed1cd464968ab1b34f2f1762ddae2","tags":["x_refsource_MISC","fix"]},{"url":"https://github.com/http4s/http4s/releases/tag/v0.23.35","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/http4s/http4s/releases/tag/v1.0.0-M47","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/69xxx/CVE-2026-69210.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-69210","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-69210","title":"Http4s: WebSocket decoder accepts negative length, causing infinite decode loop","description":"Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, WebSocket FrameTranscoder.bodyLength rejects extended payload lengths above Integer.MAX_VALUE but permits negative 64-bit lengths. A remote client that completes a WebSocket handshake through an Ember server can send such a frame, causing the decoder to return an empty frame without advancing its input. The decode loop then runs indefinitely, pins a worker at full CPU, and grows an ArrayBuffer without bound, resulting in denial of service. This issue is fixed in versions 0.23.35 and 1.0.0-M47.","status":"published","published":"2026-09-15T19:19:04.868Z","modified":"2026-09-17T16:45:18.332Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-835","CWE-1284"],"updated_at":"2026-11-02T13:50:27.582139Z"}],"euvd":[{"id":"EUVD-2026-79192","description":"Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, WebSocket FrameTranscoder.bodyLength rejects extended payload lengths above Integer.MAX_VALUE but permits negative 64-bit lengths. A remote client that completes a WebSocket handshake through an Ember server can send such a frame, causing the decoder to return an empty frame without advancing its input. The decode loop then runs indefinitely, pins a worker at full CPU, and grows an ArrayBuffer without bound, resulting in denial of service. This issue is fixed in versions 0.23.35 and 1.0.0-M47.","status":"published","published":"2026-09-15T19:19:04Z","modified":"2026-09-17T16:45:18Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T17:28:11.273554Z"}],"nvd":[{"id":"CVE-2026-69210","description":"Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, WebSocket FrameTranscoder.bodyLength rejects extended payload lengths above Integer.MAX_VALUE but permits negative 64-bit lengths. A remote client that completes a WebSocket handshake through an Ember server can send such a frame, causing the decoder to return an empty frame without advancing its input. The decode loop then runs indefinitely, pins a worker at full CPU, and grows an ArrayBuffer without bound, resulting in denial of service. This issue is fixed in versions 0.23.35 and 1.0.0-M47.","status":"published","published":"2026-09-15T20:17:40.32Z","modified":"2026-09-17T17:16:46.5Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-835","CWE-1284"],"updated_at":"2026-11-02T14:12:47.974509Z"}],"osv":[{"id":"CVE-2026-69210","title":"Http4s: WebSocket decoder accepts negative length, causing infinite decode loop","description":"Http4s is a Scala interface for HTTP services. Prior to 0.23.35 and 1.0.0-M47, WebSocket FrameTranscoder.bodyLength rejects extended payload lengths above Integer.MAX_VALUE but permits negative 64-bit lengths. A remote client that completes a WebSocket handshake through an Ember server can send such a frame, causing the decoder to return an empty frame without advancing its input. The decode loop then runs indefinitely, pins a worker at full CPU, and grows an ArrayBuffer without bound, resulting in denial of service. This issue is fixed in versions 0.23.35 and 1.0.0-M47.","status":"published","published":"2026-09-15T19:19:04.868Z","modified":"2026-10-28T02:30:29.589612103Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-1284","CWE-835"],"updated_at":"2026-11-02T15:45:15.164658Z"}]}}
