CVE-2026-84368: joi: Prototype pollution via a `__proto__` language key in custom messages
An application that passes attacker-controlled data into joi’s custom message configuration (messages(), message(), prefs({ messages }), Joi.extend({ messages }) or rule({ message })) lets the attacker write properties onto Object.prototype, where every object in the process then inherits them. A key named __proto__ was treated as a language name, and the code reused the object it found at that key, which resolves to the prototype rather than to a new own property; a key named constructor did the same to the Object function’s statics. A consuming application that gates on the mere presence of a property (if (user.isAdmin)) can be made to take the wrong branch for every object it inspects.
This is not reachable from data that joi validates. Custom messages are schema-construction configuration, normally written by the application developer. Exploitation therefore requires an application that feeds untrusted input straight into schema construction.
References
- github.com/advisories/GHSA-6w3j-5fw6-r9vr
- github.com/hapijs/joi/commit/8d0b808f3e874d28f9078f61b7742290989afb36
- github.com/hapijs/joi/commit/90d07571923c90e3432a328fc041d1cda03d30fa
- github.com/hapijs/joi/pull/3138
- github.com/hapijs/joi/pull/3139
- github.com/hapijs/joi/security/advisories/GHSA-6w3j-5fw6-r9vr
- nvd.nist.gov/vuln/detail/CVE-2026-84368
Code Behaviors & Features
Detect and mitigate CVE-2026-84368 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →