Convict has prototype pollution via load(), loadFile(), and schema initialization
Critical severity
GitHub Reviewed
Published
Mar 24, 2026
in
mozilla/node-convict
•
Updated Mar 26, 2026
Description
Published to the GitHub Advisory Database
Mar 26, 2026
Reviewed
Mar 26, 2026
Last updated
Mar 26, 2026
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.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: mozilla/node-convict#423
References