{"id":"CVE-2026-35515","aliases":["CLSA-2026-1792161434","CLSA-2026-1792161496","CLSA-2026-1792161675","CLSA-2026-1792161752","CLSA-2026-1792161909","EUVD-2026-19680","GHSA-36xv-jgw5-4q75","ROOT-APP-NPM-CVE-2026-35515"],"status":"published","title":"@nestjs/core Improperly Neutralizes Special Elements in Output Used by a Downstream Component ('Injection')","description":"Nest is a framework for building scalable Node.js server-side applications. Prior to 11.1.18, SseStream._transform() interpolates message.type and message.id directly into Server-Sent Events text protocol output without sanitizing newline characters (\\r, \\n). Since the SSE protocol treats both \\r and \\n as field delimiters and \\n\\n as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. This vulnerability is fixed in 11.1.18.","severity":{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00243,"percentile":0.15682,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-74"],"published":"2026-04-06T17:59:51Z","modified":"2026-11-10T19:58:27Z","fixes":[{"ecosystem":"npm","package":"@nestjs/core","fixed_in":["11.1.18"],"sources":["ghsa","osv"]},{"ecosystem":"TuxCare:npm","package":"@nestjs/core","fixed_in":["10.4.22-tuxcare.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@nestjs/core","fixed_in":["10.4.20-aikido.1","11.1.6-aikido.1","10.4.22-aikido.1","10.3.8-aikido.2","10.3.8-aikido.3","10.4.3-aikido.1","11.1.9-aikido.1","10.2.5-aikido.1","9.0.7-aikido.1","10.3.0-aikido.1","10.4.20-aikido.2","10.4.22-aikido.2","11.1.6-aikido.2"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/nestjs__core","fixed_in":["10.3.8-root.io.1","10.4.20-root.io.1","11.1.6-root.io.1","10.4.22-root.io.1","10.3.8-root.io.2","10.3.8-root.io.3","10.4.3-root.io.1","11.1.9-root.io.1","11.1.6-root.io.2","10.2.5-root.io.1","9.0.7-root.io.1","10.3.0-root.io.1","10.4.20-root.io.2","10.4.22-root.io.2"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@nestjs/core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"11.1.17"},{"fixed":"11.1.18"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nestjs/common","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"10.4.22-tuxcare.0"},{"fixed":"10.4.22-tuxcare.1"}]}],"versions":["10.4.22"],"bundled":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nestjs/core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"10.4.22-tuxcare.0"},{"fixed":"10.4.22-tuxcare.1"}]}],"versions":["10.4.22"]},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nestjs/microservices","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"10.4.22-tuxcare.0"},{"fixed":"10.4.22-tuxcare.1"}]}],"versions":["10.4.22"],"bundled":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nestjs/platform-express","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"10.4.22-tuxcare.0"},{"fixed":"10.4.22-tuxcare.1"}]}],"versions":["10.4.22"],"bundled":2},{"source":"osv","ecosystem":"TuxCare:npm","package":"@nestjs/platform-socket.io","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"10.4.22-tuxcare.0"},{"fixed":"10.4.22-tuxcare.1"}]}],"versions":["10.4.22"],"bundled":2},{"source":"osv","ecosystem":"npm","package":"@nestjs/core","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"11.1.18"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@nestjs/core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"10.4.20-aikido.1"},{"fixed":"11.1.6-aikido.1"},{"fixed":"10.4.22-aikido.1"},{"fixed":"10.3.8-aikido.2"},{"fixed":"10.3.8-aikido.3"},{"fixed":"10.4.3-aikido.1"},{"fixed":"11.1.9-aikido.1"},{"fixed":"10.2.5-aikido.1"},{"fixed":"9.0.7-aikido.1"},{"fixed":"10.3.0-aikido.1"},{"fixed":"10.4.20-aikido.2"},{"fixed":"10.4.22-aikido.2"},{"fixed":"11.1.6-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/nestjs__core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"10.3.8-root.io.1"},{"fixed":"10.4.20-root.io.1"},{"fixed":"11.1.6-root.io.1"},{"fixed":"10.4.22-root.io.1"},{"fixed":"10.3.8-root.io.2"},{"fixed":"10.3.8-root.io.3"},{"fixed":"10.4.3-root.io.1"},{"fixed":"11.1.9-root.io.1"},{"fixed":"11.1.6-root.io.2"},{"fixed":"10.2.5-root.io.1"},{"fixed":"9.0.7-root.io.1"},{"fixed":"10.3.0-root.io.1"},{"fixed":"10.4.20-root.io.2"},{"fixed":"10.4.22-root.io.2"}]}]}],"products":[{"vendor":"nestjs","product":"nest"}],"references":[{"url":"https://github.com/nestjs/nest/security/advisories/GHSA-36xv-jgw5-4q75","tags":["x_refsource_CONFIRM","Vendor Advisory","advisory","web"]},{"url":"https://github.com/nestjs/nest/pull/16686","tags":["web"]},{"url":"https://github.com/nestjs/nest/commit/83558ae774a990a7916141d3abe0b6548ff3a8b2","tags":["web"]},{"url":"https://github.com/nestjs/nest/releases/tag/v11.1.18","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-35515","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-36xv-jgw5-4q75"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/35xxx/CVE-2026-35515.json","tags":["advisory"]},{"url":"https://github.com/nestjs/nest","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-35515","title":"@nestjs/core Improperly Neutralizes Special Elements in Output Used by a Downstream Component ('Injection')","description":"Nest is a framework for building scalable Node.js server-side applications. Prior to 11.1.18, SseStream._transform() interpolates message.type and message.id directly into Server-Sent Events text protocol output without sanitizing newline characters (\\r, \\n). Since the SSE protocol treats both \\r and \\n as field delimiters and \\n\\n as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. This vulnerability is fixed in 11.1.18.","status":"published","published":"2026-04-07T15:06:10.619Z","modified":"2026-04-07T15:58:37.067Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium","assessor":"cna"}],"cwes":["CWE-74"],"updated_at":"2026-11-02T14:20:05.15083Z"}],"euvd":[{"id":"EUVD-2026-19680","description":"Nest is a framework for building scalable Node.js server-side applications. Prior to 11.1.18, SseStream._transform() interpolates message.type and message.id directly into Server-Sent Events text protocol output without sanitizing newline characters (\\r, \\n). Since the SSE protocol treats both \\r and \\n as field delimiters and \\n\\n as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. This vulnerability is fixed in 11.1.18.","status":"published","published":"2026-04-07T15:06:10Z","modified":"2026-04-07T15:58:37Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium"}],"updated_at":"2026-11-02T19:25:12.908169Z"}],"ghsa":[{"id":"GHSA-36xv-jgw5-4q75","title":"@nestjs/core Improperly Neutralizes Special Elements in Output Used by a Downstream Component ('Injection')","description":"### Impact\n_What kind of vulnerability is it? Who is impacted?_\n\n[`SseStream._transform()`](https://github.com/nestjs/nest/blob/dea5279ef8fcb568de158003e4281759a2cd7675/packages/core/router/sse-stream.ts) interpolates `message.type` and `message.id` directly into Server-Sent Events text protocol output without sanitizing newline characters (`\\r`, `\\n`). Since the SSE protocol treats both `\\r` and `\\n` as field delimiters and `\\n\\n` as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. Spring Framework's own security patch ([6e97587](https://github.com/spring-projects/spring-framework/commit/6e9758700a4946be1dca85ca937ef2603e291301)) validates these same fields (`id`, `event`) for the same reason.\n\nActual impact:\n\n- **Event spoofing**: Attacker forges SSE events with arbitrary `event:` types, causing client-side `EventSource.addEventListener()` callbacks to fire for wrong event types.\n- **Data injection**: Attacker injects arbitrary `data:` payloads, potentially triggering XSS if the client renders SSE data as HTML without sanitization.\n- **Reconnection corruption**: Attacker injects `id:` fields, corrupting the `Last-Event-ID` header on reconnection, causing the client to miss or replay events.\n- **Attack precondition**: Requires the developer to map user-influenced data to the `type` or `id` fields of SSE messages. Direct HTTP request input does not reach these fields without developer code bridging the gap.\n-\n### Patches\n_Has the problem been patched? What versions should users upgrade to?_\n\nPatched in `@nestjs/core@11.1.18`","status":"published","published":"2026-04-06T17:59:51Z","modified":"2026-04-24T20:46:24Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:L","level":"medium"}],"cwes":["CWE-74"],"updated_at":"2026-11-02T14:39:57.650091Z"}],"nvd":[{"id":"CVE-2026-35515","description":"Nest is a framework for building scalable Node.js server-side applications. Prior to 11.1.18, SseStream._transform() interpolates message.type and message.id directly into Server-Sent Events text protocol output without sanitizing newline characters (\\r, \\n). Since the SSE protocol treats both \\r and \\n as field delimiters and \\n\\n as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. This vulnerability is fixed in 11.1.18.","status":"published","published":"2026-04-07T16:16:27.773Z","modified":"2026-10-26T21:10:00.17Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","level":"medium","assessor":"secondary"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:L","level":"medium","assessor":"primary"}],"cwes":["CWE-74"],"updated_at":"2026-11-02T14:12:13.535987Z"}],"osv":[{"id":"CVE-2026-35515","title":"@nestjs/core Improperly Neutralizes Special Elements in Output Used by a Downstream Component ('Injection')","description":"Nest is a framework for building scalable Node.js server-side applications. Prior to 11.1.18, SseStream._transform() interpolates message.type and message.id directly into Server-Sent Events text protocol output without sanitizing newline characters (\\r, \\n). Since the SSE protocol treats both \\r and \\n as field delimiters and \\n\\n as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. This vulnerability is fixed in 11.1.18.","status":"published","published":"2026-04-07T15:06:10.619Z","modified":"2026-10-28T02:30:41.548228297Z","cvss":[{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium"}],"cwes":["CWE-74"],"updated_at":"2026-11-02T15:45:02.673625Z"},{"id":"GHSA-36xv-jgw5-4q75","title":"@nestjs/core Improperly Neutralizes Special Elements in Output Used by a Downstream Component ('Injection')","description":"### Impact\n_What kind of vulnerability is it? Who is impacted?_\n\n[`SseStream._transform()`](https://github.com/nestjs/nest/blob/dea5279ef8fcb568de158003e4281759a2cd7675/packages/core/router/sse-stream.ts) interpolates `message.type` and `message.id` directly into Server-Sent Events text protocol output without sanitizing newline characters (`\\r`, `\\n`). Since the SSE protocol treats both `\\r` and `\\n` as field delimiters and `\\n\\n` as event boundaries, an attacker who can influence these fields through upstream data sources can inject arbitrary SSE events, spoof event types, and corrupt reconnection state. Spring Framework's own security patch ([6e97587](https://github.com/spring-projects/spring-framework/commit/6e9758700a4946be1dca85ca937ef2603e291301)) validates these same fields (`id`, `event`) for the same reason.\n\nActual impact:\n\n- **Event spoofing**: Attacker forges SSE events with arbitrary `event:` types, causing client-side `EventSource.addEventListener()` callbacks to fire for wrong event types.\n- **Data injection**: Attacker injects arbitrary `data:` payloads, potentially triggering XSS if the client renders SSE data as HTML without sanitization.\n- **Reconnection corruption**: Attacker injects `id:` fields, corrupting the `Last-Event-ID` header on reconnection, causing the client to miss or replay events.\n- **Attack precondition**: Requires the developer to map user-influenced data to the `type` or `id` fields of SSE messages. Direct HTTP request input does not reach these fields without developer code bridging the gap.\n-\n### Patches\n_Has the problem been patched? What versions should users upgrade to?_\n\nPatched in `@nestjs/core@11.1.18`","status":"published","published":"2026-04-06T17:59:51Z","modified":"2026-09-10T03:50:42.305999581Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:L","level":"medium"},{"version":"4.0","score":6.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:N","level":"medium"}],"cwes":["CWE-74"],"updated_at":"2026-11-02T15:46:35.406455Z"},{"id":"CLSA-2026-1792161434","title":"TuxCare security update for @nestjs/common (2 CVEs)","description":"TuxCare rebuilt @nestjs/common to address 2 CVEs. Fixed in 10.4.22-tuxcare.1.","status":"published","published":"2026-10-16T14:37:14Z","modified":"2026-10-16T16:30:51.941983429Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161496","title":"TuxCare security update for @nestjs/core (1 CVE)","description":"TuxCare rebuilt @nestjs/core to address 1 CVE. Fixed in 10.4.22-tuxcare.1.","status":"published","published":"2026-10-16T14:38:15Z","modified":"2026-11-10T19:58:27.174245794Z","updated_at":"2026-11-10T20:07:20.748062Z"},{"id":"CLSA-2026-1792161675","title":"TuxCare security update for @nestjs/microservices (2 CVEs)","description":"TuxCare rebuilt @nestjs/microservices to address 2 CVEs. Fixed in 10.4.22-tuxcare.1.","status":"published","published":"2026-10-16T14:41:15Z","modified":"2026-10-16T16:31:07.072420709Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161752","title":"TuxCare security update for @nestjs/platform-express (2 CVEs)","description":"TuxCare rebuilt @nestjs/platform-express to address 2 CVEs. Fixed in 10.4.22-tuxcare.1.","status":"published","published":"2026-10-16T14:42:32Z","modified":"2026-10-16T16:31:29.12365872Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"CLSA-2026-1792161909","title":"TuxCare security update for @nestjs/platform-socket.io (2 CVEs)","description":"TuxCare rebuilt @nestjs/platform-socket.io to address 2 CVEs. Fixed in 10.4.22-tuxcare.1.","status":"published","published":"2026-10-16T14:45:09Z","modified":"2026-10-16T16:31:41.015861481Z","updated_at":"2026-11-02T15:43:51.213191Z"},{"id":"ROOT-APP-NPM-CVE-2026-35515","title":"CVE-2026-35515 in @nestjs/core - Patched by Root","description":"Root has patched CVE-2026-35515 in the @nestjs/core package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-08-04T15:01:19Z","modified":"2026-08-04T19:30:19.090218753Z","updated_at":"2026-11-02T15:53:27.649662Z"}]}}
