Skip to main content

gettext-converter EUVDEUVD-2026-77634

| CVE-2026-55451 HIGH
Improperly Controlled Modification of Object Prototype Attributes (Prototype Pollution) (CWE-1321)
2026-08-20 https://github.com/locize/gettext-converter GHSA-f4jp-rw7w-ccwg
8.3
CVSS 4.0 · Vendor: https://github.com/locize/gettext-converter
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply crafted translation key '__proto__##x' via user-controlled input
  2. Delivery
    Application forwards untrusted data to js2i18next()
  3. Exploit
    Function splits key on '##', resolves '__proto__' to Object.prototype
  4. Execution
    Unsafe dynamic property write pollutes Object.prototype
  5. Persist
    Polluted properties propagate to all runtime objects
  6. Impact
    Denial 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

gettext-converter < 1.3.3

Affected Packages

npm gettext-converter fix: 1.3.3

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

Vendor (https://github.com/locize/gettext-converter) PRIMARY 8.3 HIGH
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
vuln.today AI 8.3 HIGH

Network-delivered untrusted translation input; S:C because Object.prototype pollution corrupts the entire Node.js runtime beyond the library boundary.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:H/VA:H/SC:N/SI:N/SA:N
Red Hat 8.2 HIGH

Primary rating from Vendor (https://github.com/locize/gettext-converter).

CVSS VectorVendor: https://github.com/locize/gettext-converter

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
CVSS changed
Sep 14, 2026 - 17:22 NVD
8.3 (HIGH)

DescriptionCVE.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.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 1 npm packages depend on gettext-converter (1 direct, 0 indirect)

Ecosystem-wide dependent count for version 1.3.3.

Threat Intelligence Overview

EPSS Score
0.4%
Top 65% exploitable
Prevalence
Low
specialized gettext-to-i18next conversion utility, limited enterprise footprint
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

42
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2026-34621 HIGH POC
8.6 Apr 11

Prototype pollution in Adobe Acrobat Reader versions 24.001.30356, 26.001.21367 and earlier enables arbitrary code execu

CVE-2021-23450 CRITICAL POC
9.8 Dec 17

All versions of package dojo are vulnerable to Prototype Pollution via the setObject function. Rated critical severity (

CVE-2024-56059 CRITICAL
9.8 Dec 18

Prototype pollution in the farinspace Partners WordPress plugin (versions up to and including 0.2.0) enables remote unau

CVE-2021-23383 CRITICAL POC
9.8 May 04

The package handlebars before 4.7.7 are vulnerable to Prototype Pollution when selecting certain compiling options to co

CVE-2020-7788 CRITICAL POC
9.8 Dec 11

This affects the package ini before 1.3.6. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitabl

CVE-2020-28271 CRITICAL POC
9.8 Nov 12

Prototype pollution vulnerability in 'deephas' versions 1.0.0 through 1.0.5 allows attacker to cause a denial of service

CVE-2023-38894 CRITICAL POC
9.8 Aug 16

A Prototype Pollution issue in Cronvel Tree-kit v.0.7.4 and before allows a remote attacker to execute arbitrary code vi

CVE-2024-24292 CRITICAL POC
9.8 Mar 28

A Prototype Pollution issue in Aliconnect /sdk v.0.0.6 allows an attacker to execute arbitrary code via the aim function

CVE-2023-26121 CRITICAL POC
10.0 Apr 11

All versions of the package safe-eval are vulnerable to Prototype Pollution via the safeEval function, due to improper s

CVE-2021-23449 CRITICAL POC
10.0 Oct 18

This affects the package vm2 before 3.9.4 via a Prototype Pollution attack vector, which can lead to execution of arbitr

CVE-2024-39011 CRITICAL POC
9.8 Jul 30

Prototype Pollution in chargeover redoc v2.0.9-rc.69 allows attackers to execute arbitrary code or cause a Denial of Ser

CVE-2024-38988 CRITICAL POC
9.8 Mar 28

alizeait unflatto <= 1.0.2 was discovered to contain a prototype pollution via the method exports.unflatto at /dist/inde

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy