Bug 2542793 (CVE-2026-84367)

Summary: CVE-2026-84367 joi: joi: Prototype pollution via dynamic key renaming
Product: [Other] Security Response Reporter: OSIDB Bzimport <bzimport>
Component: vulnerabilityAssignee: Product Security DevOps Team <prodsec-dev>
Status: NEW --- QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: unspecifiedCC: akhatavk, aos-team-art-private, asdas, cdrage, dfreiber, dpaolell, drow, dymurray, gparvin, ibolton, jbalunas, jburrell, jdelft, jmatthew, jmontleo, jupierce, lchilton, lgarciaa, mbiarnes, pgaikwad, pjindal, ppalepu, ppostler, prdhamdh, rhaigner, rhel-process-autobot, rjohnson, rushinde, sdawley, sfeifer, sghai, sidsharm, slucidi, sseago, suppawar, tsze, vkumar, vlaad, watson-tool-maintainers
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
A flaw was found in joi. A remote attacker can alter the prototype of an object returned by validation by submitting specially crafted input keys. When an application configures dynamic key renaming based on regular expression patterns, the validator fails to properly restrict sensitive internal property names. This vulnerability allows untrusted input to influence object properties and application logic, potentially leading to unexpected application behavior.
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description OSIDB Bzimport 2026-09-28 22:39:50 UTC
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.