Skip to main content
← All vulnerabilities
CVE-2026-84367GHSA-GG4H-3HG2-GRPC

joi: object().rename() with a template target can set the validated object's prototype

Published
Last modified
published
Not listed in CISA KEV
Fix
Fixed in 17.13.5, 18.2.4
None on Exploit-DB, Metasploit or GitHub
  • Exploitation: none
  • Automatable: no
  • Technical impact: partial

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.

Timeline

  1. CVE published
  2. CISA SSVC assessment

    Exploitation: none · Automatable: no · Technical impact: partial

  3. Record last updated

Affected versions

  • hapijs joi

    From 16.0.0 · fixed in 17.13.5; From 18.0.0 · fixed in 18.2.4

  • joinpm

    From 16.0.0 · fixed in 17.13.5

  • joinpm

    From 18.0.0 · fixed in 18.2.4

References 5

GitHub · hapijs/joi