Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
Remote unauthenticated via HTTP, but requires a non-default deployment (missingKeyHandler exposed, saveMissing on, default keySeparator) so AC:H; integrity/availability high via prototype writes, low confidentiality from possible auth-check bypass.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3Blast Radius
ecosystem impact- 44 npm packages depend on i18next-fs-backend (4 direct, 40 indirect)
Ecosystem-wide dependent count for version 2.6.6.
DescriptionCVE.org
Versions prior to 2.6.6 are vulnerable to prototype pollution via crafted missing-key strings when used to persist missing translation keys (e.g. via i18next-http-middleware's missingKeyHandler exposed to untrusted input). Backend.writeFile() splits each queued missing-key string on the configured keySeparator (default .) before calling the internal setPath() walker. The walker (getLastOfPath in lib/utils.js) did not guard against unsafe segments, so a key like "__proto__.polluted" was split into ["__proto__", "polluted"] and walked straight into Object.prototype, allowing an attacker to write arbitrary properties onto the global object prototype. Depending on the host application, polluted prototype properties may cause crashes, corrupted translation behaviour, configuration poisoning, or bypasses of property-based security checks. Applications are affected only if the missingKeyHandler (or another route that forwards untrusted request bodies to i18next.t(..., { ... }) with saveMissing: true) is reachable by untrusted users and the default behaviour of splitting missing-key strings on keySeparator is in use (i.e. keySeparator is not false). Apps that do not expose missing-key persistence to untrusted input are not directly affected through this attack path. This issue has been fixed in version 2.6.6. If developers using the library are unable to upgrade immediately, they should take the following precautions: do not expose i18next-http-middleware's missingKeyHandler to untrusted users (mount it behind authentication, or remove the route), disable missing-key persistence (saveMissing: false, or no backend.create implementation) when accepting writes from untrusted input, and set keySeparator: false in their i18next options to disable backend key splitting (note: this also disables nested translation keys).
AnalysisAI
Prototype pollution in i18next-fs-backend versions prior to 2.6.6 allows remote attackers to write arbitrary properties onto Object.prototype by submitting crafted missing-translation keys such as '__proto__.polluted' to applications that expose i18next-http-middleware's missingKeyHandler to untrusted input. Backend.writeFile() split keys on the configured keySeparator (default '.') and the getLastOfPath walker in lib/utils.js did not filter unsafe segments before traversing the target object. No public exploit identified at time of analysis, but a coordinated-disclosure advisory (GHSA-2933-q333-qg83) and a fixing commit are public, and downstream impact can include denial of service, configuration poisoning, and bypass of property-based security checks.
Technical ContextAI
i18next-fs-backend is a Node.js filesystem backend for the i18next internationalization framework that persists translation strings - including 'missing' keys reported by clients - to JSON files on disk. The vulnerability is a CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes / 'prototype pollution') flaw in the in-memory tree walker getLastOfPath() inside lib/utils.js, which is used by setPath()/pushPath() when writeFile() flushes queued missing-key entries. Because each missing-key string is split on keySeparator (default '.') and then each segment is used as a property lookup on a plain object, an attacker-controlled segment of '__proto__', 'constructor', or 'prototype' walks the helper into Object.prototype and lets subsequent assignments mutate every JavaScript object in the process. CPE coverage is cpe:2.3:a:i18next:i18next-fs-backend:*:*:*:*:*:*:*:*, and the attack path is realistically reached through the companion i18next-http-middleware missingKeyHandler route (which also received a defence-in-depth fix in 3.9.7).
RemediationAI
Vendor-released patch: upgrade i18next-fs-backend to 2.6.6, which adds an UNSAFE_KEYS guard (__proto__, constructor, prototype) inside getLastOfPath so unsafe traversals are dropped silently while legitimate dotted keys like 'header.title' continue to work - see commit 3ab0448087da6935a40117f904b7457281f963f4 and advisory GHSA-2933-q333-qg83. As defence-in-depth, also upgrade i18next-http-middleware to 3.9.7. If immediate upgrade is not possible, mount the missingKeyHandler route behind authentication or remove it entirely; alternatively disable missing-key persistence by setting saveMissing: false or removing the backend.create implementation (trade-off: client-reported missing keys will no longer be persisted); or set keySeparator: false in i18next options to disable backend key splitting, which closes the attack but also disables nested translation keys across the application and will break any namespaces that rely on dotted lookups.
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-37005
GHSA-2933-q333-qg83