Логотип exploitDog
Консоль
Логотип exploitDog

exploitDog

github логотип

GHSA-6w3j-5fw6-r9vr

Опубликовано: 08 сент. 2026
Источник: github
Github: Прошло ревью
CVSS3: 3.7

Описание

joi: Prototype pollution via a __proto__ language key in custom messages

Impact

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.

Patches

Upgrade to version 18.2.5 or 17.13.6.

Workarounds

Do not pass untrusted input into messages(), message(), prefs({ messages }), Joi.extend({ messages }) or rule({ message }). Or validate that they don't contain any __proto__ or constructor property.

Пакеты

Наименование

joi

npm
Затронутые версииВерсия исправления

>= 17.2.0, < 17.13.6

17.13.6

Наименование

@hapi/joi

npm
Затронутые версииВерсия исправления

>= 16.0.0, <= 17.1.1

Отсутствует

Наименование

joi

npm
Затронутые версииВерсия исправления

>= 18.0.0, < 18.2.5

18.2.5

EPSS

Процентиль: 17%
0.00255
Низкий

3.7 Low

CVSS3

Дефекты

CWE-1321

Связанные уязвимости

CVSS3: 3.7
redhat
15 дней назад

joi is a schema description language and data validator for JavaScript. From 16.0.0 until 17.13.6 and 18.2.5, the @hapi/joi package through 17.1.1 and the successor joi package contain prototype pollution in lib/messages.js, where exports.compile() and exports.merge() reuse inherited objects for attacker-controlled language keys supplied through messages(), message(), prefs({ messages }), Joi.extend({ messages }), or rule({ message }). A language key named __proto__ writes properties onto Object.prototype, and constructor writes to the Object function's static properties. A consuming application that gates on the presence of an inherited property can take the wrong branch for every inspected object. The flaw is not reachable from data that joi validates and requires an application to feed untrusted input directly into schema-construction configuration. This issue is fixed in joi versions 17.13.6 and 18.2.5; no fixed @hapi/joi version is available.

CVSS3: 3.7
nvd
15 дней назад

joi is a schema description language and data validator for JavaScript. From 16.0.0 until 17.13.6 and 18.2.5, the @hapi/joi package through 17.1.1 and the successor joi package contain prototype pollution in lib/messages.js, where exports.compile() and exports.merge() reuse inherited objects for attacker-controlled language keys supplied through messages(), message(), prefs({ messages }), Joi.extend({ messages }), or rule({ message }). A language key named __proto__ writes properties onto Object.prototype, and constructor writes to the Object function's static properties. A consuming application that gates on the presence of an inherited property can take the wrong branch for every inspected object. The flaw is not reachable from data that joi validates and requires an application to feed untrusted input directly into schema-construction configuration. This issue is fixed in joi versions 17.13.6 and 18.2.5; no fixed @hapi/joi version is available.

EPSS

Процентиль: 17%
0.00255
Низкий

3.7 Low

CVSS3

Дефекты

CWE-1321