CVE-2026-41690
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-41690 is a prototype pollution vulnerability in i18next-http-middleware, a Node.js middleware used with web frameworks such as Express and Fastify. Versions prior to 3.9.3 allow an unauthenticated HTTP client to pollute Object.prototype in the hosting Node.js process via two unvalidated entry points: getResourcesHandler and missingKeyHandler. The vulnerability was published on May 8, 2026, with the security advisory authored by the i18next maintainer. It carries a CVSS v3.1 base score of 8.6 (High) (GitHub Advisory).

Technical details

The root cause is classified as CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes — Prototype Pollution) and CWE-22 (Path Traversal). In getResourcesHandler, the lng and ns query parameters are read without validation and passed to utils.setPath(resources, [lng, ns], value), which walks the key path without guarding against __proto__, constructor, or prototype keys — allowing a crafted GET request such as GET /locales/resources.json?lng=__proto__&ns=isAdmin to write directly into Object.prototype. In missingKeyHandler, a for...in loop iterates over the incoming JSON request body, meaning a POST body like {"__proto__": {"isAdmin": true}} is forwarded into i18next.services.backendConnector.saveMissing, achieving the same pollution via a different vector. No authentication or special privileges are required, and no user interaction is needed (GitHub Advisory).

Impact

After a single unauthenticated request, every subsequently created {} object in the Node.js process inherits the polluted prototype property, with process-wide and persistent effect until the server restarts. The most immediate impact is authorization bypass — for example, if (user.isAdmin) evaluates to true for all users, effectively granting any unauthenticated user administrative privileges. Additionally, type-confusion denial of service can be triggered in downstream code that reads unexpected prototype-chain properties, and depending on how the application uses polluted objects, the vulnerability can be chained into remote code execution (GitHub Advisory, The Hacker Wire).

Exploitability

As of the time of publication, there is no public proof-of-concept exploit and no confirmed in-the-wild exploitation (GitHub Advisory). The EPSS score is approximately 0.075%, indicating a currently low probability of exploitation in the near term. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. However, the low attack complexity — requiring no authentication, no user interaction, and only a single HTTP request — makes it straightforward to exploit if a PoC is released.

Exploitation steps

  1. Reconnaissance: Identify Node.js applications using i18next-http-middleware versions prior to 3.9.3 by inspecting HTTP response headers, JavaScript bundle references, or package manifests (e.g., package.json exposed via misconfiguration).
  2. Trigger prototype pollution via getResourcesHandler: Send a crafted GET request to the middleware's resource endpoint with __proto__ as the language parameter and the desired property as the namespace: GET /locales/resources.json?lng=__proto__&ns=isAdmin
  3. Alternatively, trigger via missingKeyHandler: Send a POST request with a JSON body containing a __proto__ key to the missing key handler endpoint: POST /locales/add/en/translation with body {"__proto__": {"isAdmin": true}}
  4. Verify pollution: Confirm that Object.prototype.isAdmin is now true by observing application behavior — e.g., accessing admin-only endpoints without credentials.
  5. Escalate impact: Leverage the polluted prototype to bypass authorization checks, trigger DoS via type confusion, or chain into RCE by targeting downstream code that reads from polluted objects (e.g., template engines, child_process calls, or serialization libraries susceptible to prototype pollution gadgets) (GitHub Advisory).

Indicators of compromise

  • Network: Unusual GET requests to /locales/resources.json (or equivalent resource endpoint) with lng=__proto__, lng=constructor, or lng=prototype in query parameters; POST requests to missing key handler endpoints with JSON bodies containing __proto__, constructor, or prototype keys.
  • Logs: Web server or application access logs showing requests with __proto__ or constructor in query string parameters or URL-encoded equivalents (%5F%5Fproto%5F%5F); repeated requests to i18next resource or missing-key endpoints from a single IP.
  • Process/Application Behavior: Unexpected elevation of privileges for non-admin users; authorization checks returning true for all users; application crashes or type errors in downstream code following unusual HTTP requests.
  • File System: No direct file system artifacts expected from prototype pollution alone, but if chained to RCE, watch for new files, web shells, or modified scripts in the application directory (GitHub Advisory).

Mitigation and workarounds

The primary remediation is to upgrade i18next-http-middleware to version 3.9.3 or later, which patches both vulnerable entry points: utils.setPath now blocks __proto__, constructor, and prototype keys, and missingKeyHandler replaces for...in iteration with Object.keys() plus an explicit dangerous-key guard. No complete workaround exists short of upgrading; however, as a partial mitigation, a WAF rule can be deployed to reject requests containing __proto__, constructor, or prototype in lng/ns query parameters or JSON body keys. Input validation and sanitization of all user-supplied parameters should also be implemented as a defense-in-depth measure (GitHub Advisory).

Community reactions

The Hacker Wire published a write-up highlighting the RCE potential of the vulnerability, drawing attention to the prototype pollution chain (The Hacker Wire). The advisory was noted on Bluesky via the CVE tracking account shortly after publication. Overall community reaction has been moderate, consistent with a library-level vulnerability that requires downstream code conditions to reach its most severe impact.

Additional resources


SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-54504HIGH8.8
  • JavaScript logoJavaScript
  • @andrea9293/mcp-documentation-server
NoYesSep 17, 2026
CVE-2026-77615HIGH8.7
  • JavaScript logoJavaScript
  • paella-core
NoYesSep 17, 2026
CVE-2026-91127HIGH8.2
  • JavaScript logoJavaScript
  • @file-viewer/doc
NoYesSep 18, 2026
CVE-2026-77301HIGH7.5
  • JavaScript logoJavaScript
  • adm-zip
NoYesSep 18, 2026
CVE-2026-84992MEDIUM6.1
  • JavaScript logoJavaScript
  • md-editor-v3
NoYesSep 18, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management