Back to Blog
critical SEVERITY4 min read

i18next-fs-backend 2.6.4 Prototype Pollution via Crafted Missing-Key

A critical prototype pollution vulnerability in i18next-fs-backend 2.6.4 allows attackers to modify Object.prototype through maliciously crafted translation key strings. The fix upgrades the package from 2.6.4 to 2.6.6, eliminating the unsafe key handling that permitted this attack vector.

O
By Orbis AppSec
•Published October 1, 2026•Reviewed October 1, 2026

Answer Summary

i18next-fs-backend versions 2.6.4 and earlier are vulnerable to prototype pollution when processing crafted missing-key strings in translation lookups. An attacker can modify Object.prototype properties, leading to application-wide logic manipulation or remote code execution in downstream code. The fix upgrades to version 2.6.6, which sanitizes key parsing to prevent prototype pollution. CWE is unknown.

Vulnerability at a Glance

cweN/A
fixUpgrade i18next-fs-backend to version 2.6.6
riskCritical — Object.prototype modification can compromise entire application
languageJavaScript (Node.js)
root causeUnsafe parsing of user-influenced translation key strings without prototype pollution safeguards
vulnerabilityPrototype Pollution

The Translation Backend That Became an Attack Vector

When applications internationalize, they trust their translation backend to safely handle missing keys. In i18next-fs-backend 2.6.4, that trust was misplaced: a crafted string passed as a missing translation key could walk straight up to Object.prototype and rewrite it. The result? Application-wide compromise from a single malicious translation lookup.

This vulnerability, tracked as CVE-2026-48713, demonstrates how even infrastructure libraries—those that merely load JSON files from disk—can become critical security boundaries when they process attacker-influenced input without defensive validation.

Affected Versions

Affected <= 2.6.4
Fixed in 2.6.6
Ecosystem npm
CVE / GHSA CVE-2026-48713 / not assigned
CWE unknown

The Vulnerability Explained

i18next-fs-backend provides filesystem-based translation loading for the i18next internationalization framework. When a translation key is missing, the backend attempts to resolve it through its key-path parsing logic. The vulnerability exists in how this parsing handles special property names.

The problematic pattern involves the backend's internal key resolution, where a string like __proto__.polluted or constructor.prototype.polluted would be split and used to set properties on nested objects. Without proper sanitization, these keys don't create nested translation objects—they traverse into Object.prototype itself.

Consider how i18next-fs-backend processes a missing key lookup. When i18next.t('__proto__.isAdmin') is called without that key existing, the backend's resolution path attempts to build the nested structure. The code effectively executes:

// Simplified representation of the vulnerable path
let target = {};
let parts = key.split('.');
// Iteratively: target = target[parts[i]] || {};
// When parts[0] is '__proto__', this becomes:
target['__proto__'] = target['__proto__'] || {};

Once Object.prototype.isAdmin is set to true, every object in the JavaScript runtime inherits this property. Authentication checks, authorization logic, and business rules throughout the application become compromised.

Attack Scenario

An application using i18next with browser language detection might process a URL like:

https://app.example.com/?lng=__proto__.constructor&ns=prototype&key=exec

If this flows into a translation lookup that reaches i18next-fs-backend's missing-key handler, the attacker can pollute Object.prototype with arbitrary properties. In a typical Express.js application, this could alter req.user checks, bypass Object.hasOwnProperty validations, or modify behavior in completely unrelated modules loaded later in the same process.

The Fix

The resolution patches i18next-fs-backend from version 2.6.4 to 2.6.6. The version bump includes hardened key-path parsing that blocks prototype pollution vectors:

-        "i18next-fs-backend": "^2.6.4",
+        "i18next-fs-backend": "^2.6.6",

The 2.6.6 release introduces validation that rejects or escapes keys containing __proto__, constructor, and prototype as path segments. This is implemented through a deny-list approach at the point where the key string is tokenized and before any property assignment occurs.

The fix preserves all legitimate translation key patterns while eliminating the dangerous property-access chains. Applications using nested keys like common.buttons.submit continue to work; only the specifically dangerous prototype-pollution payload patterns are neutralized.

Key Takeaways

  • Translation keys are untrusted input: Any string that reaches i18next.t() or its backend equivalents—from user URLs, API responses, or database entries—must be treated as potentially malicious.

  • Missing-key handlers are attack surfaces: The code path that executes when a translation doesn't exist is often less scrutinized than the success path, making it attractive for vulnerability research.

  • Prototype pollution travels far: A compromise in i18next-fs-backend doesn't just affect translations; it poisons the entire JavaScript execution environment, including code that never imports i18next directly.

  • Patch version increments can be critical: The jump from 2.6.4 to 2.6.6 is a patch-level change, yet it addresses a critical vulnerability. Automated dependency update tools that ignore patch bumps risk missing security fixes.

  • Filesystem backends still process strings: Don't assume "just loading JSON from disk" is safe. The path from filename to loaded object involves string processing that can introduce injection vulnerabilities.

How Orbis AppSec Detected This

Orbis AppSec's static analysis traced this vulnerability through the following data flow:

  • Source: User-influenced input entering through HTTP request parameters that feed into i18next.t() translation key arguments
  • Sink: The i18next-fs-backend missing-key resolution logic that performs property assignment using dynamic key strings
  • Missing control: Absence of prototype pollution validation before using split key segments as property names
  • CWE: unknown
  • Fix: Upgraded i18next-fs-backend to 2.6.6, which implements deny-list validation for __proto__, constructor, and prototype in key-path parsing

Orbis AppSec automatically detected this vulnerability and opened a pull request with the fix. Try Orbis AppSec on your repositories to find and fix issues like this automatically.

Conclusion

CVE-2026-48713 reminds us that prototype pollution isn't limited to deep-merge utilities and configuration parsers. Any code that splits strings and uses the results to access object properties—yes, even your translation backend—must defend against __proto__ and constructor traversal. The 2.6.6 patch closes this specific path in i18next-fs-backend, but the broader lesson applies wherever dynamic property access meets external input.

Prevention and further reading

Frequently Asked Questions

Does i18next-fs-backend 2.6.6 change the translation key format or only add validation?

The 2.6.6 release adds internal sanitization to prevent prototype pollution while preserving the same key format and lookup behavior. Existing translation files continue to work without modification.

Can the prototype pollution in i18next-fs-backend 2.6.4 be triggered through browser-languagedetector's detected locale?

Yes, since browser-languagedetector feeds into i18next's translation system, a crafted locale or namespace string passed through the detection chain could reach the vulnerable missing-key handler in i18next-fs-backend.

Is the hosted-git-info dependency upgrade in the same PR related to CVE-2026-48713?

No, the hosted-git-info version remains at 8.0.2 in this fix. Only i18next-fs-backend is upgraded from 2.6.4 to 2.6.6 to address the prototype pollution vulnerability.

View the Security Fix

Check out the pull request that fixed this vulnerability

View PR #34

Related Articles

high

CVE-2026-54673: builder-util-runtime Leaks Auth Headers on Redirect

electron-updater and electron-builder rely on builder-util-runtime to fetch update manifests and artifacts over HTTP. A flaw in that shared HTTP executor allowed credential headers attached to the original update-feed request to be re-sent after a redirect, exposing them to any host the redirect pointed to. The project fixes this by upgrading builder-util-runtime to 9.7.0 and collapsing a duplicate, older copy of the package that electron-updater had pinned on its own.

high

image-size 1.2.1 DoS: Zero-Valued Dimensions in Image Buffer Parser

A high-severity denial-of-service vulnerability in image-size 1.2.1 allows attackers to crash Node.js services using malicious image buffers with zero-valued dimensions. The fix removes the vulnerable `queue` dependency and tightens dimension validation in version 2.0.3.

high

linkify-it 5.0.1 mailto: Link Parsing Causes DoS

linkify-it versions up to 5.0.1 can be forced into excessive processing time when autolinking a specially crafted mailto: link, allowing a remote attacker to degrade or stall the parsing thread. Upgrading to linkify-it 5.0.2 closes the issue; any application that runs linkify-it (directly or via markdown-it) against untrusted text should update immediately.

critical

Slim CLI Unverified Remote Fetch in Version Check

The Slim CLI's version check command fetched remote package metadata without integrity verification, enabling attackers to serve malicious responses through repository hijacking or man-in-the-middle attacks. The fix adds input validation, HTTP status checking, and response schema verification to ensure only legitimate version data is processed.

critical

ensureTrivy() CWE-494: Unverified Trivy Binary Download

The `ensureTrivy()` function fetched the Trivy vulnerability scanner from GitHub releases without verifying its integrity, exposing applications to supply-chain attacks. An attacker in a MITM position or a compromised CDN could substitute a malicious binary that executes with the application's privileges. The fix adds cryptographic verification using SHA256 checksums published alongside each release.

critical

Model Fetching Without Integrity Verification in ONNX Loading

A machine learning application was fetching ONNX model files and chunks over the network without verifying their integrity, creating an opening for model poisoning attacks. The fix adds cryptographic integrity verification at the point where downloaded chunks are reassembled and cached, ensuring models have not been modified in transit or at rest.