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
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Lifecycle Timeline
3Blast Radius
ecosystem impact- 44 npm packages depend on i18next-http-middleware (4 direct, 40 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.
More in Prototype Pollution
View allPrototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu
Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau
Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service
A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi
A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function
All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s
This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr
Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser
alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde
A vulnerability exists in the 'dagre-d3-es' Node.js package version 7.0.9, specifically within the 'bk' module's addConf
A Prototype Pollution vulnerability in the util-deps.addFileDepend function of magix-combine-ex versions thru 1.2.10 all
Chartist 1.x through 1.3.0 allows Prototype Pollution via the extend function. Rated critical severity (CVSS 9.8), this
Same technique Denial Of Service
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37006
GHSA-f49m-vf83-692w