Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted translation key '__proto__##x' via user-controlled input
-
DeliveryApplication forwards untrusted data to js2i18next()
-
ExploitFunction splits key on '##', resolves '__proto__' to Object.prototype
-
ExecutionUnsafe dynamic property write pollutes Object.prototype
-
PersistPolluted properties propagate to all runtime objects
-
ImpactDenial of service or downstream logic bypass
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V3 - Web Frontend Security Prototype pollution prevention
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the application passes translation data originating from an untrusted or user-controlled source to js2i18next(). The attacker must be able to inject a translation key that, when split on the '##' separator (the library's default), yields '__proto__', 'constructor', or 'prototype' as one of the resulting segments - for example, a key literally named '__proto__##anyProperty'. No special server configuration or non-default library option is required because '##' is the default key separator; however, if the consuming application overrides the separator to a different character, the attacker must craft the key using that alternative separator instead. Applications that load translation files only from developer-controlled, static, or build-time sources are not practically exploitable regardless of library version. What limits exploitation: the application must actively accept and process external translation input (uploaded PO files, API-submitted i18next JSON, user-editable localization strings); absent that workflow, the vulnerable code path is never reached. Authentication requirements are not independently confirmable from available data - they depend entirely on how the consuming application gates access to the translation-ingestion endpoint. |
| Impact | No CVSS score was provided with this advisory; the assessed vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L, estimating roughly a High-severity base score, reflecting a typical network-delivery scenario for untrusted translation data with runtime-wide scope impact. No EPSS score is available. The vulnerability is not listed in CISA KEV and no public proof-of-concept exploit is identified at time of analysis - these two signals together suggest no confirmed opportunistic exploitation. Real-world risk is highly context-dependent: applications that load translations exclusively from developer-controlled or build-time sources are not practically exploitable regardless of library version, which substantially limits the realistic attack surface. Applications exposing a translation-upload API, a localization management interface, or any endpoint that accepts user-supplied PO or i18next JSON files represent the highest-risk scenario. Prototype pollution as a vulnerability class is well-understood and has a documented history of enabling downstream privilege escalation when polluted properties intersect with authorization or configuration logic, so the 'further attacks' caveat in the advisory is credible. The patch is available, trivial to apply, and independently confirmed in the commit diff and CHANGELOG; the primary driver for urgency is whether untrusted translation input is part of the application's supported workflow. |
| Exploit ScenarioDerived | An attacker submits a crafted PO or i18next JSON payload to an application that exposes a translation-upload or localization API backed by gettext-converter. The payload contains a key such as '__proto__##isAdmin' with value 'true'; when js2i18next() processes this key it splits on '##', resolves '__proto__' to Object.prototype, and writes the value, causing every subsequently created or accessed object in the runtime to inherit isAdmin as true. Depending on application logic this could bypass role checks, corrupt configuration objects, or cause uncaught exceptions that crash the service. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 20, 2026
Prototype pollution in the gettext-converter npm library's js2i18next() function enables an attacker who can supply crafted translation data to write arbitrary values onto Object.prototype, corrupting the shared prototype chain for the entire Node.js runtime. All versions of gettext-converter below 1.3.3 are vulnerable when the consuming application passes PO or i18next JS translation objects from an untrusted or user-controlled source to the function. Impact ranges from denial of service through malformed object behavior to potential downstream logic bypasses, depending on how polluted properties interact with application code. No public exploit is identified at time of analysis and no CISA KEV listing exists; vendor-released patch is confirmed at version 1.3.3.
RemediationAI
Upgrade gettext-converter to version 1.3.3 or later using npm install gettext-converter@1.3.3 or yarn add gettext-converter@1.3.3. The fix is confirmed in commit df90c3b93e51faef68891d97b626544f619c5b31 and the release at https://github.com/locize/gettext-converter/releases/tag/v1.3.3. If an immediate upgrade is not feasible, sanitize all translation keys before passing them to js2i18next() by rejecting any key whose '##'-separated segments include '__proto__', 'constructor', or 'prototype'; note that maintaining this blocklist independently introduces an ongoing maintenance burden and is error-prone compared to upgrading. A second workaround is to restrict translation data sources to developer-controlled or build-time files only, eliminating the untrusted-input attack vector entirely - this has no functional side effects but does not fix the underlying code. The advisory and issue tracker are available at https://github.com/locize/gettext-converter/issues/15.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected package is gettext-converter (pkg:npm/gettext-converter), a Node.js library published by locize that converts between GNU gettext/PO format and i18next-compatible JS translation objects. The js2i18next() function processes nested translation keys by splitting on a configurable key separator (default '##') and traversing or creating object property chains dynamically using each segment as a property key. CWE-1321 (Improper Neutralization of Special Elements in Data Query Logic - Prototype Pollution) describes the root cause: unsanitized user-controlled input used as dynamic object property keys without a denylist. When a key segment equals '__proto__', JavaScript's prototype inheritance causes the write to target Object.prototype instead of a regular nested object, permanently altering all objects in the runtime until the process restarts. The fix introduced in commit df90c3b93e51faef68891d97b626544f619c5b31 added an UNSAFE_KEYS constant (['__proto__', 'constructor', 'prototype']) that is checked before any dynamic property assignment, with matching keys silently dropped.
Know when Prototype Pollution gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N
Network-delivered untrusted translation input; S:C because Object.prototype pollution corrupts the entire Node.js runtime beyond the library boundary.
Primary rating from Vendor (https://github.com/locize/gettext-converter).
CVSS VectorVendor: https://github.com/locize/gettext-converter
Lifecycle Timeline
1DescriptionCVE.org
Impact
js2i18next() is vulnerable to prototype pollution. When converting translations, it splits nested keys on the key separator (default ##) and uses each segment as a dynamic object key while building the output object. A key whose segment is __proto__ (e.g. __proto__##gcPolluted) causes the converter to resolve Object.prototype as the nested write target and assign the translated value onto it, polluting Object.prototype for the whole runtime.
Any application that converts translation data (PO / i18next JS objects) originating from an untrusted or user-controlled source is affected. Prototype pollution can lead to denial of service and, depending on the surrounding application, may enable further attacks.
Patches
Fixed in gettext-converter@1.3.3. Key segments equal to __proto__, constructor, or prototype are now rejected before being used as dynamic object keys.
Workarounds
Upgrade to 1.3.3. If upgrading is not immediately possible, sanitize/validate translation keys before passing them to js2i18next() and reject any key whose ##-separated segments include __proto__, constructor, or prototype.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
More in Prototype Pollution
View allPrototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu
All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (
Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau
The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co
This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl
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
EUVD-2026-77634
GHSA-f4jp-rw7w-ccwg
NVD
CVE.org
EPSS
Exploit-DB