Node.js CVE-2026-33863
CRITICALLifecycle Timeline
3Blast Radius
ecosystem impact- 995 npm packages depend on convict (223 direct, 777 indirect)
Ecosystem-wide dependent count for version 6.2.5.
DescriptionCVE.org
Impact
Two unguarded prototype pollution paths exist, not covered by previous fixes:
config.load()/config.loadFile()-overlay()recursively merges config data without checking for forbidden keys. Input containing__proto__orconstructor.prototype(e.g. from a JSON file) causes the recursion to reachObject.prototypeand write attacker-controlled values onto it.- Schema initialization - passing a schema with
constructor.prototype.*keys toconvict({...})causes default-value propagation to write directly toObject.prototypeat startup.
Depending on how polluted properties are consumed, impact ranges from unexpected behavior to authentication bypass or RCE.
Workarounds
Do not pass untrusted data to load(), loadFile(), or convict().
Resources
Prior advisory: GHSA-44fc-8fm5-q62h Related issue: https://github.com/mozilla/node-convict/issues/423
AnalysisAI
Prototype pollution in Mozilla's node-convict configuration library allows attackers to inject properties into Object.prototype via two unguarded code paths: config.load()/loadFile() methods that fail to filter forbidden keys during recursive merge operations, and schema initialization accepting constructor.prototype.* keys during default-value propagation. Applications using node-convict (pkg:npm/convict) that process untrusted configuration data face impacts ranging from authentication bypass to remote code execution depending on how polluted properties propagate through the application. This represents an incomplete fix for prior prototype pollution issues (GHSA-44fc-8fm5-q62h), with no public exploit identified at time of analysis.
Technical ContextAI
The vulnerability affects Mozilla's node-convict library (CPE: pkg:npm/convict), a configuration management module for Node.js applications that validates and loads configuration from various sources including JSON files and environment variables. The root cause is CWE-1321 (Improperly Controlled Modification of Object Prototype Attributes, commonly known as prototype pollution), where the overlay() function recursively merges configuration objects without sanitizing keys like __proto__ or constructor.prototype. JavaScript's prototype chain allows modifications to Object.prototype to propagate globally, enabling attackers to inject properties that affect all objects. The vulnerability bypasses earlier security patches documented in GHSA-44fc-8fm5-q62h, exposing two distinct attack vectors: runtime configuration loading via load()/loadFile() methods and schema initialization during convict() constructor invocation.
RemediationAI
Upgrade to the patched version of node-convict specified in the vendor security advisory at https://github.com/mozilla/node-convict/security/advisories/GHSA-hf2r-9gf9-rwch (exact version number not provided in available intelligence data). As an interim workaround until patching is completed, implement strict input validation to reject configuration data from untrusted sources passed to load(), loadFile(), or convict() constructor methods. Specifically, sanitize or reject any configuration objects containing __proto__, constructor, or prototype keys before processing. Review application architecture to ensure configuration loading occurs only from trusted, controlled sources rather than user-supplied files or external APIs. For defense-in-depth, consider using Object.freeze(Object.prototype) at application startup to prevent prototype modifications, though this may break legitimate application functionality and should be tested thoroughly. Consult the prior advisory GHSA-44fc-8fm5-q62h at https://github.com/mozilla/node-convict/security/advisories/GHSA-44fc-8fm5-q62h for additional context on related prototype pollution patterns in this library.
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
The AES-NI implementation in OpenSSL before 1.0.1t and 1.0.2 before 1.0.2h does not consider memory allocation during a
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today