Skip to main content

i18next-http-backend CVE-2026-118258

| EUVDEUVD-2026-112360 LOW
Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection') (CWE-74)
2026-10-28 GitHub_M GHSA-3cmx-xjww-583x
3.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Identify app with query-shaped loadPath/addPath template
  2. Delivery
    Craft lng/ns value containing & and = separators
  3. Exploit
    Deliver via ?lng=, cookie, or Accept-Language header
  4. Execution
    Backend interpolates raw value into outgoing translations request
  5. Persist
    Injected parameters override ns/tenant/flags (HTTP parameter pollution)
  6. Impact
    Expose other namespaces or tenants' resources

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Input neutralization, injection prevention
Exploitation Conditions

Two preconditions must both hold: (1) the loadPath or addPath template must place {{lng}} or {{ns}} in the URL query string (e.g. the README multiload shape /locales/resources.json?lng={{lng}}&ns={{ns}}), and (2) the attacker must control the language or namespace value - which in normal setups comes from ?lng=, a cookie, localStorage, or the Accept-Language header (and i18next-http-middleware's LanguageDetector on the server). Explicitly NOT exploitable: the default path template /locales/{{lng}}/{{ns}}.json and any other path-only template (the earlier 3.0.5 fix already blocks ? in the path position), and applications that restrict languages via a supportedLngs allowlist. The injected '+' multiload form (de+en) continues to work normally. Realistic impact is further limited by how the target translations API branches on the injected/overridden parameters.

Impact

All signals converge on low real-world priority. The supplied CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) scores 3.7 (Low): network-reachable and unauthenticated (PR:N), but AC:H and limited confidentiality-only impact (C:L, I:N, A:N). The AC:H is well-grounded in the evidence - exploitation requires a non-default query-shaped loadPath/addPath template, so the raw CVSS understates how conditional this is. The vuln.today Decision label is 'monitor' (not act_now/emergency), consistent with the low score. There is NO CISA KEV listing (not actively exploited) and NO EPSS score was provided in the input, so probability-of-exploitation cannot be quantified here. A detailed public proof-of-concept is published in the GHSA advisory with full reproduction steps and captured output, so working exploitation is demonstrable - but PoC availability is a distinct signal from active exploitation and should not be read as the latter. Net: this is a genuine but low-severity, configuration-dependent issue (an incomplete fix for CVE-2026-41691), appropriately triaged as 'monitor/patch on normal cadence' rather than an emergency. Missing data to note: EPSS absent; no KEV; impact magnitude depends on downstream translations-API behavior, which the sources cannot enumerate.

Exploit ScenarioDerived

On a server-side (SSR/Node) app using i18next-http-middleware with a README-style multiload template like /locales/resources.json?lng={{lng}}&ns={{ns}}, an unauthenticated visitor requests GET /?lng=de%26ns%3Dprivate%26admin%3Dtrue. Because & and = were not rejected, the application server then sends …?lng=de&ns=private&admin=true&ns=common to its own internal/partner translations API using the server's network position and credentials, potentially exposing other namespaces or tenants or altering backend behavior. A public PoC in the GHSA advisory demonstrates this end-to-end; the browser-side variant achieves the same via a crafted ?lng= link against the victim's same-origin request.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

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

Alert me

AnalysisAIv1 – Oct 28, 2026

Query-parameter injection in i18next-http-backend before 4.0.4 lets attacker-controlled language or namespace values add or override parameters on outgoing translation requests whenever a loadPath or addPath template places {{lng}} or {{ns}} in the query string, such as the multiload shape /locales/resources.json?lng={{lng}}&ns={{ns}}. Server-side deployments using i18next-http-middleware's LanguageDetector are the most exposed case: an unauthenticated visitor supplying ?lng=de%26ns%3Dprivate%26admin%3Dtrue can make the application issue a request to its own translations API as ...?lng=de&ns=private&admin=true&ns=common, leveraging the server's network position and credentials; on the browser side the same crafted link affects the victim's same-origin request. Severity is bounded (CVSS 3.1 3.7, AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) because exploitation requires both a query-shaped template and attacker control of the language or namespace value, and real impact depends on how the translations API branches on the injected parameters; the default /locales/{{lng}}/{{ns}}.json template and supportedLngs-restricted applications are unaffected, the advisory publishes a proof-of-concept script, and no confirmed active exploitation is reported in the available sources (priority label: monitor).

RemediationAI

Vendor-released patch: upgrade i18next-http-backend to 4.0.4 (release tag v4.0.4, commit b0eef9efd425055c554787cef7f878de33bbf510), which rejects '&', '=' and ';' in both lng and ns values in addition to the previously blocked '?', '#', '%' and ':', as described in advisory GHSA-3cmx-xjww-583x (https://github.com/i18next/i18next-http-backend/security/advisories/GHSA-3cmx-xjww-583x). The fix preserves the '+' multiload form, so users of de+en style multi-language requests can upgrade without losing functionality. If upgrading cannot be done immediately, the advisory states that keeping the template path-only - the default /locales/{{lng}}/{{ns}}.json or any other template that does not place {{lng}} or {{ns}} in the query string - is not affected, and that restricting languages with a supportedLngs allowlist also removes the vector, though the trade-off is that query-shaped multiload templates or unrestricted language detection must be given up until the patch is applied. Applications using the related i18next-locize-backend with custom query-shaped templates should move to 10.0.4, which the advisory lists as fixed for that package.

Affected VersionsENISA

i18next-http-backend < 4.0.4

Affected Packages

npm i18next-http-backend fix: 4.0.4

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 flaw is CWE-74 (improper neutralization of special elements in output used by a downstream component), specifically HTTP parameter pollution in the URL built by interpolateUrl() in lib/utils.js. The 3.0.5 sanitizer rejects empty or over-128-character values, prototype keys, '..', backslash, control characters and /[?#%:\s]/, and isSafeLangUrlSegment adds only '/' and '@' - neither rejects '&', '=' or ';'. interpolateUrl splits the value on '+', validates each segment, and joins the raw segments into the template without any encoding, so when the placeholder sits after '?' in the template those characters are structural query separators rather than path characters. The vulnerable call sites are _readAny, which builds the load URL from loadPath with lng and ns, and create, which builds the missing-key URL from addPath. This is an incomplete fix for CVE-2026-41691 (GHSA-q89c-q3h5-w34g), which closed only the '?' path-position form. The values are attacker-reachable in normal setups because language detection reads ?lng=, cookies, localStorage and request headers, and i18next-http-middleware's LanguageDetector does the same server-side; the advisory's PoC confirms the injected ns=private&admin=true parameters reach the fake translations API with the server's own request, while the '?' variant is refused by the existing check. The 4.0.4 commit b0eef9efd425055c554787cef7f878de33bbf510 widens the check to /[?#%:&=;\s]/, and '+' joined multiload values such as de+en continue to work.

Know when I18Next 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 (GitHub_M) PRIMARY 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 3.7 LOW

Non-default query-shaped template required (AC:H); attacker-controlled language value needs no auth (PR:N); impact is limited disclosure of other namespaces/tenants, with no confirmed integrity or availability loss.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Oct 28, 2026 - 19:03 EUVD

DescriptionCVE.org

i18next-http-backend is a backend layer for i18next that loads translation resources in Node.js, browsers, and Deno. Prior to 4.0.4, interpolateUrl inserts unencoded language and namespace values into loadPath or addPath templates without rejecting ampersand (&), equals (=), or semicolon (;) query separators. When a template places lng or ns in the query string and an attacker controls that value, the attacker can add or override parameters on browser or server-side translation requests, potentially exposing other namespaces or tenants or changing backend behavior through the application's network position and credentials. This vulnerability is the result of an incomplete fix for CVE-2026-41691. This issue is fixed in version 4.0.4.

Threat Intelligence Overview

Prevalence
Medium
popular i18next npm backend plugin, but vulnerable query-template config is non-default
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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 LOW
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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