IPBUF安全漏洞报告
English
CVE-2026-35515 CVSS 6.1 中危

CVE-2026-35515 NestJS SSE协议注入漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-35515
漏洞类型
CRLF注入
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Nest (NestJS)

相关标签

CRLF注入SSE注入NestJSNode.js输入验证协议注入

漏洞概述

Nest是一个用于构建可扩展Node.js服务端应用程序的框架。在11.1.18版本之前,SseStream._transform()方法在处理Server-Sent Events (SSE)文本协议输出时,直接将message.type和message.id插入输出流,且未对换行符(\r, \n)进行清理。由于SSE协议将\r和\n视为字段分隔符,将\n\n视为事件边界,攻击者若能通过上游数据源影响这些字段,即可注入任意SSE事件、伪造事件类型并破坏重连状态。

技术细节

该漏洞位于Nest框架的SseStream类中。在受影响版本中,_transform方法负责将消息对象转换为SSE协议文本流。实现过程中,代码直接将外部可控的message.type和message.id字段拼接到输出字符串,忽略了SSE协议对换行符的特殊处理。SSE协议规定,\r和\n用于分隔字段,而\n\n用于分隔不同的独立事件。攻击者可以通过控制上游数据,在type或id字段中注入恶意的换行符序列(例如\ndata: injected\n\n)。当SseStream处理此数据时,解析器会将注入的内容误认为是新的事件,从而导致SSE消息伪造。这不仅可能导致客户端接收到错误数据,还可能通过操纵Last-Event-ID字段干扰重连逻辑,造成客户端状态异常。

攻击链分析

STEP 1
侦察
攻击者识别出目标应用使用NestJS框架并启用了SSE(Server-Sent Events)功能端点。
STEP 2
武器化
攻击者构造包含特殊换行符(\r, \n)的恶意数据 payloads,旨在注入伪造的SSE事件字段或分隔符。
STEP 3
投递
攻击者通过应用的上游数据输入接口(如API请求、数据库查询结果等)将恶意数据提交至服务器。
STEP 4
利用
NestJS的SseStream处理该数据时,未过滤换行符,直接将其拼接到SSE响应流中,导致协议边界被破坏。
STEP 5
影响
连接的SSE客户端接收到攻击者伪造的事件数据,可能导致信息泄露、客户端逻辑错误或状态劫持。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Vulnerable Concept in NestJS < 11.1.18 // This PoC demonstrates how injecting newlines in the 'id' field splits the SSE event. const mockSseStream = { _transform(message, encoding, callback) { // Vulnerable logic: direct interpolation without sanitization const type = message.type || 'message'; const id = message.id || ''; const data = message.data; // Constructing the SSE payload // If id contains '\nevent: fake\ndata: pwned\n\n', it breaks the protocol let payload = `id: ${id}\nevent: ${type}\ndata: ${data}\n\n`; this.push(payload); callback(); } }; // Exploit Payload Simulation const maliciousPayload = { id: 'legitimate-id\nevent: spoofed\ndata: Malicious Data Injected!\n\n', type: 'original', data: 'Original Data' }; console.log('--- Output Generated by Vulnerable Stream ---'); mockSseStream._transform(maliciousPayload, null, () => {}); /* Output: id: legitimate-id event: spoofed data: Malicious Data Injected! event: original data: Original Data The client receives two events: one spoofed and one original. */

影响范围

Nest < 11.1.18

防御指南

临时缓解措施
如果无法立即升级,建议在SSE数据发送前实现中间件或拦截器,对即将传入SseStream的消息对象中的type和id字段进行清洗,使用正则表达式替换掉所有的回车符和换行符,确保协议格式的完整性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表