CVE-2026-84367 (GCVE-0-2026-84367)
Vulnerability from cvelistv5
Published
2026-09-01 20:33
Modified
2026-09-03 15:58
Severity ?
VLAI Severity ?
EPSS score ?
CWE
- CWE-1321 - Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution')
Summary
joi is a schema description language and data validator for JavaScript. From 16.0.0 until 17.13.5 and 18.2.4, joi's lib/types/keys.js internals.rename() implementation used by object().rename() permits a schema that renames keys with a regular-expression source and a Joi.expression() or Joi.x() target that interpolates the pattern's own match data, combined with { multiple: true }, to derive a target from an attacker-controlled input key. An attacker can send x-__proto__ with an object value, causing the target to render as __proto__ and set the prototype of the object returned by validate() instead of creating an own key. The global Object.prototype is not modified, so the effect is confined to the object returned by that validation call. Static-string targets and schemas using the default { multiple: false } are not affected. This issue is fixed in versions 17.13.5 and 18.2.4.
References
| URL | Tags | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|||||||||||||||||
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-84367",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-03T15:58:17.940373Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-03T15:58:42.656Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"product": "joi",
"vendor": "hapijs",
"versions": [
{
"status": "affected",
"version": "\u003e= 16.0.0, \u003c 17.13.5"
},
{
"status": "affected",
"version": "\u003e= 18.0.0, \u003c 18.2.4"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "joi is a schema description language and data validator for JavaScript. From 16.0.0 until 17.13.5 and 18.2.4, joi\u0027s lib/types/keys.js internals.rename() implementation used by object().rename() permits a schema that renames keys with a regular-expression source and a Joi.expression() or Joi.x() target that interpolates the pattern\u0027s own match data, combined with { multiple: true }, to derive a target from an attacker-controlled input key. An attacker can send x-__proto__ with an object value, causing the target to render as __proto__ and set the prototype of the object returned by validate() instead of creating an own key. The global Object.prototype is not modified, so the effect is confined to the object returned by that validation call. Static-string targets and schemas using the default { multiple: false } are not affected. This issue is fixed in versions 17.13.5 and 18.2.4."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 3.7,
"baseSeverity": "LOW",
"confidentialityImpact": "NONE",
"integrityImpact": "LOW",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N",
"version": "3.1"
}
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-1321",
"description": "CWE-1321: Improperly Controlled Modification of Object Prototype Attributes (\u0027Prototype Pollution\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-01T20:33:29.295Z",
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M"
},
"references": [
{
"name": "https://github.com/hapijs/joi/security/advisories/GHSA-gg4h-3hg2-grpc",
"tags": [
"x_refsource_CONFIRM"
],
"url": "https://github.com/hapijs/joi/security/advisories/GHSA-gg4h-3hg2-grpc"
},
{
"name": "https://github.com/hapijs/joi/pull/3134",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/hapijs/joi/pull/3134"
},
{
"name": "https://github.com/hapijs/joi/pull/3135",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/hapijs/joi/pull/3135"
},
{
"name": "https://github.com/hapijs/joi/commit/162f367aa178d2e1ebec8dc1164e5fe16536ddf6",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/hapijs/joi/commit/162f367aa178d2e1ebec8dc1164e5fe16536ddf6"
},
{
"name": "https://github.com/hapijs/joi/commit/172ececa192feda532b743d77bc9d3e523d19b01",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/hapijs/joi/commit/172ececa192feda532b743d77bc9d3e523d19b01"
}
],
"source": {
"advisory": "GHSA-gg4h-3hg2-grpc",
"discovery": "UNKNOWN"
},
"title": "joi: object().rename() with a template target can set the validated object\u0027s prototype"
}
},
"cveMetadata": {
"assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"assignerShortName": "GitHub_M",
"cveId": "CVE-2026-84367",
"datePublished": "2026-09-01T20:33:29.295Z",
"dateReserved": "2026-09-01T16:27:58.129Z",
"dateUpdated": "2026-09-03T15:58:42.656Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"vulnrichment": {
"containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2026-84367\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2026-09-03T15:58:17.940373Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2026-09-03T15:58:39.544Z\"}}], \"cna\": {\"title\": \"joi: object().rename() with a template target can set the validated object\u0027s prototype\", \"source\": {\"advisory\": \"GHSA-gg4h-3hg2-grpc\", \"discovery\": \"UNKNOWN\"}, \"metrics\": [{\"cvssV3_1\": {\"scope\": \"UNCHANGED\", \"version\": \"3.1\", \"baseScore\": 3.7, \"attackVector\": \"NETWORK\", \"baseSeverity\": \"LOW\", \"vectorString\": \"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N\", \"integrityImpact\": \"LOW\", \"userInteraction\": \"NONE\", \"attackComplexity\": \"HIGH\", \"availabilityImpact\": \"NONE\", \"privilegesRequired\": \"NONE\", \"confidentialityImpact\": \"NONE\"}}], \"affected\": [{\"vendor\": \"hapijs\", \"product\": \"joi\", \"versions\": [{\"status\": \"affected\", \"version\": \"\u003e= 16.0.0, \u003c 17.13.5\"}, {\"status\": \"affected\", \"version\": \"\u003e= 18.0.0, \u003c 18.2.4\"}]}], \"references\": [{\"url\": \"https://github.com/hapijs/joi/security/advisories/GHSA-gg4h-3hg2-grpc\", \"name\": \"https://github.com/hapijs/joi/security/advisories/GHSA-gg4h-3hg2-grpc\", \"tags\": [\"x_refsource_CONFIRM\"]}, {\"url\": \"https://github.com/hapijs/joi/pull/3134\", \"name\": \"https://github.com/hapijs/joi/pull/3134\", \"tags\": [\"x_refsource_MISC\"]}, {\"url\": \"https://github.com/hapijs/joi/pull/3135\", \"name\": \"https://github.com/hapijs/joi/pull/3135\", \"tags\": [\"x_refsource_MISC\"]}, {\"url\": \"https://github.com/hapijs/joi/commit/162f367aa178d2e1ebec8dc1164e5fe16536ddf6\", \"name\": \"https://github.com/hapijs/joi/commit/162f367aa178d2e1ebec8dc1164e5fe16536ddf6\", \"tags\": [\"x_refsource_MISC\"]}, {\"url\": \"https://github.com/hapijs/joi/commit/172ececa192feda532b743d77bc9d3e523d19b01\", \"name\": \"https://github.com/hapijs/joi/commit/172ececa192feda532b743d77bc9d3e523d19b01\", \"tags\": [\"x_refsource_MISC\"]}], \"descriptions\": [{\"lang\": \"en\", \"value\": \"joi is a schema description language and data validator for JavaScript. From 16.0.0 until 17.13.5 and 18.2.4, joi\u0027s lib/types/keys.js internals.rename() implementation used by object().rename() permits a schema that renames keys with a regular-expression source and a Joi.expression() or Joi.x() target that interpolates the pattern\u0027s own match data, combined with { multiple: true }, to derive a target from an attacker-controlled input key. An attacker can send x-__proto__ with an object value, causing the target to render as __proto__ and set the prototype of the object returned by validate() instead of creating an own key. The global Object.prototype is not modified, so the effect is confined to the object returned by that validation call. Static-string targets and schemas using the default { multiple: false } are not affected. This issue is fixed in versions 17.13.5 and 18.2.4.\"}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-1321\", \"description\": \"CWE-1321: Improperly Controlled Modification of Object Prototype Attributes (\u0027Prototype Pollution\u0027)\"}]}], \"providerMetadata\": {\"orgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"shortName\": \"GitHub_M\", \"dateUpdated\": \"2026-09-01T20:33:29.295Z\"}}}",
"cveMetadata": "{\"cveId\": \"CVE-2026-84367\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-09-03T15:58:42.656Z\", \"dateReserved\": \"2026-09-01T16:27:58.129Z\", \"assignerOrgId\": \"a0819718-46f1-4df5-94e2-005712e83aaa\", \"datePublished\": \"2026-09-01T20:33:29.295Z\", \"assignerShortName\": \"GitHub_M\"}",
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…