IPBUF安全漏洞报告
English
CVE-2026-41885 CVSS 6.5 中危

CVE-2026-41885: i18next-locize-backend URL注入漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-41885
漏洞类型
URL注入 (URL Injection)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
i18next-locize-backend

相关标签

URL注入路径遍历i18nextSSRF

漏洞概述

i18next-locize-backend是一个用于Node.js和浏览器的i18next后端模块。在9.0.2版本之前,由于未对用户输入的参数(如lng、ns)进行验证和编码,直接将其拼接到URL模板中,导致存在安全漏洞。攻击者可通过控制这些输入(如查询参数)篡改传出的HTTP请求URL结构,从而可能访问未授权资源或造成SSRF攻击。

技术细节

该漏洞的核心在于`lib/utils.js`中的`interpolate`辅助函数直接替换模板变量而未进行URL编码。在`lib/index.js`的多个位置(如`_readAny`、`getLanguages`、`writePage`),当构建`loadPath`、`privatePath`等URL时使用了该函数。攻击者可以通过`?lng=`或`?ns=`等查询参数注入路径遍历字符(如`../`)或其他URL控制字符。由于缺乏路径组件验证,这些恶意输入会改变原始请求的路径结构,导致应用程序向非预期的端点发起请求。

攻击链分析

STEP 1
1. 信息收集
识别目标应用是否使用了i18next-locize-backend库且版本低于9.0.2。
STEP 2
2. 寻找注入点
分析应用如何获取语言参数(lng)、命名空间参数等,确认是否源自用户可控的输入(如URL参数、Cookie或Header)。
STEP 3
3. 构造恶意载荷
构造包含路径遍历字符(如../)或URL控制符的参数值,例如将lng参数设为"../../admin/config"。
STEP 4
4. 发送攻击请求
将包含恶意载荷的请求发送给目标服务器。
STEP 5
5. 执行篡改
服务器端 vulnerable 库将载荷直接拼接到URL中,导致向非预期的API端点发起请求,可能泄露数据或执行操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC demonstrating URL injection via lng parameter // Attacker sends request: https://target.com?lng=../../admin/delete // Vulnerable code logic in lib/utils.js (interpolate function) function interpolate(str, params) { return str.replace(/\{\{([\w]+)\}\}/g, (match, key) => { return params[key] || match; // No encoding here }); } const config = { loadPath: 'https://api.locize.com/projects/{{projectId}}/{{lng}}/{{ns}}', projectId: 'my-project', ns: 'translation' }; // User controlled input const userInput = { lng: '../../malicious-endpoint', ns: 'default' }; // Vulnerable execution const finalUrl = interpolate(config.loadPath, { ...config, ...userInput }); console.log("Malicious URL constructed:", finalUrl); // Output: https://api.locize.com/projects/my-project/../../malicious-endpoint/default

影响范围

i18next-locize-backend < 9.0.2

防御指南

临时缓解措施
建议立即升级i18next-locize-backend库到版本9.0.2或更高版本以修复此漏洞。如果暂时无法升级,应在应用层面对所有传入的lng、ns、projectId和version参数实施严格的输入验证和过滤(例如仅允许字母数字字符),并在拼接URL前使用encodeURIComponent进行编码,以防止路径篡改。

参考链接