IPBUF安全漏洞报告
English
CVE-2026-41683 CVSS 8.6 高危

CVE-2026-41683 i18next-http-middleware CRLF注入漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-41683
漏洞类型
CRLF注入
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
i18next-http-middleware

相关标签

CRLF注入HTTP响应头注入i18nextNode.js中间件

漏洞概述

i18next-http-middleware是用于Node.js和Deno的中间件。在3.9.3版本之前,该组件存在安全漏洞。当应用使用的i18next版本低于19.5.0时,攻击者可以通过控制语言参数(lng),注入回车换行符(CRLF)序列。由于utils.escape()函数未过滤控制字符,这些特殊字符会被原样写入Content-Language响应头中。这可能导致HTTP响应头注入,进而引发缓存投毒、跨站脚本攻击(XSS)或其他敏感信息泄露风险。该漏洞无需认证且无需用户交互即可通过网络利用。

技术细节

该漏洞源于i18next-http-middleware对用户输入处理不当。具体而言,中间件将用户提供的lng参数直接传递给utils.escape()函数,该函数主要用于HTML实体编码,但并未剔除回车符(CR,\r)和换行符(LF,\n)等控制字符。在特定条件下,即应用程序使用了旧版i18next(< 19.5.0)触发LanguageDetector.js中的向后兼容回退机制时,攻击者构造的包含%0d%0a(CRLF)的恶意输入会绕过过滤。这些未经过滤的CRLF序列随后被传递给res.setHeader('Content-Language', ...),导致攻击者能够篡改HTTP响应头。攻击者可以利用此漏洞注入伪造的响应头(如Set-Cookie),实施会话劫持、缓存投毒或反射型XSS攻击。

攻击链分析

STEP 1
步骤1:侦察
攻击者识别目标应用使用了旧版本的i18next-http-middleware(< 3.9.3)且依赖旧版i18next库。
STEP 2
步骤2:构造Payload
攻击者构造包含CRLF字符(URL编码为%0D%0A)的恶意payload,例如将其放置在lng参数中,用于分割HTTP响应头。
STEP 3
步骤3:发送请求
攻击者向目标服务器发送HTTP GET请求,将包含CRLF的lng参数传递给后端。
STEP 4
步骤4:漏洞触发
后端中间件处理请求,utils.escape()未过滤CRLF,导致恶意字符被写入res.setHeader('Content-Language', ...)。
STEP 5
步骤5:执行攻击
服务器返回被篡改的响应头,攻击者利用注入的头部进行缓存投毒、XSS攻击或设置恶意Cookie。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC Concept: Sending a request with CRLF in the lng parameter // Target: Vulnerable i18next-http-middleware instance const http = require('http'); const options = { hostname: 'localhost', port: 3000, path: '/?lng=en%0D%0AX-Injected-Header: true', // Inject CRLF sequence method: 'GET' }; const req = http.request(options, (res) => { console.log(`Status: ${res.statusCode}`); console.log(`Headers: ${JSON.stringify(res.headers)}`); // Observe that 'X-Injected-Header' appears in the response headers }); req.on('error', (e) => { console.error(`Problem with request: ${e.message}`); }); req.end();

影响范围

i18next-http-middleware < 3.9.3

防御指南

临时缓解措施
如果无法立即升级,建议在反向代理层(如Nginx)或WAF中配置规则,检测并拦截请求参数中包含%0d、%0a或CR、LF字符的流量,防止响应头注入攻击。

参考链接