Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Network-reachable and unauthenticated, but AC:H because exploitation requires a vulnerable downstream backend (i18next-fs-backend ≤ 2.6.5) and an exposed missingKeyHandler with saveMissing enabled; no confidentiality impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3Blast Radius
ecosystem impact- 36 npm packages depend on i18next-http-middleware (4 direct, 32 indirect)
Ecosystem-wide dependent count for version 3.9.7.
DescriptionCVE.org
i18next-http-middleware is a middleware to be used with Node.js web frameworks like express or Fastify and also for Deno. In versions prior to 3.9.7, the missingKeyHandler blocked the literal request-body keys __proto__, constructor, and prototype (added in 3.9.3, see GHSA-5fgg-jcpf-8jjw), but did not reject dotted variants such as "__proto__.polluted". Downstream backends that split the missing-key string on a configured keySeparator (notably i18next-fs-backend ≤ 2.6.5) hand these keys to an unguarded setPath() walker that writes to Object.prototype. Applications that expose missingKeyHandler to untrusted input AND use i18next-fs-backend ≤ 2.6.5 are directly exploitable for remote prototype pollution. Other downstream backends that split the missing-key string the same way may be similarly affected. Depending on the host application, polluted prototype properties may cause crashes, corrupted translation behaviour, configuration poisoning, or bypasses of property-based security checks. This issue has been fixed in version 3.9.7. If developers cannot upgrade immediately, they should do the following: do not expose missingKeyHandler to untrusted users (mount it behind authentication, or remove the route), add a request-body filter ahead of the handler that rejects any top-level key containing __proto__, constructor, or prototype after splitting on their configured keySeparator, and disable missing-key persistence (saveMissing: false) when accepting writes from untrusted input.
Articles & Coverage 1
AnalysisAI
Remote prototype pollution in i18next-http-middleware before 3.9.7 allows unauthenticated attackers to write to Object.prototype by submitting dotted request-body keys such as '__proto__.polluted' to the missingKeyHandler. The 3.9.3 denylist blocked only literal unsafe keys; downstream backends (notably i18next-fs-backend ≤ 2.6.5) that split missing-key strings on the configured keySeparator then walked these segments into an unguarded setPath(). No public exploit identified at time of analysis, but PoC payloads are embedded in the upstream security test suite.
Technical ContextAI
i18next-http-middleware is a Node.js/Deno middleware (Express, Fastify, Deno) that exposes the i18next missing-key reporting endpoint over HTTP. Its missingKeyHandler iterates request-body keys and forwards them to backendConnector.saveMissing, which delegates persistence to whichever backend is configured. The root cause is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes): the middleware's UNSAFE_KEYS denylist (added in 3.9.3 per GHSA-5fgg-jcpf-8jjw) rejected literal '__proto__', 'constructor', and 'prototype' keys but did not split keys on i18next.options.keySeparator (default '.'), so segmented variants like '__proto__.polluted' or 'a.__proto__.polluted' passed through. i18next-fs-backend ≤ 2.6.5's writeFile() then split that string on keySeparator and handed the segments to setPath(), which walked into Object.prototype. CPE coverage is cpe:2.3:a:i18next:i18next-http-middleware:*.
RemediationAI
Vendor-released patch: upgrade i18next-http-middleware to 3.9.7, which adds utils.hasUnsafeKeySegment() and rejects any key whose segments under the configured keySeparator contain __proto__, constructor, or prototype; pair this with upgrading i18next-fs-backend to 2.6.6 to remove the root-cause setPath() walk. If immediate upgrade is not possible, do not expose missingKeyHandler to untrusted callers - mount it behind authentication or remove the route entirely (trade-off: legitimate clients lose the ability to report missing translations); add a request-body filter ahead of the handler that splits each top-level key on your configured keySeparator and rejects any segment matching __proto__, constructor, or prototype (trade-off: must mirror the exact keySeparator the app uses, including keySeparator=false); and set saveMissing: false when accepting writes from untrusted input (trade-off: disables missing-key persistence entirely). See https://github.com/i18next/i18next-http-middleware/security/advisories/GHSA-f49m-vf83-692w.
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37006
GHSA-f49m-vf83-692w