i18next is an internationalization framework for JavaScript. Prior to version 26.3.4, deepExtend in src/utils.js checks property existence with the in operator and recurses into inherited built-ins reached through Object.prototype. An application must explicitly pass attacker-controlled resource data to addResourceBundle(lng, ns, data, deep, overwrite) with both deep: true and overwrite: true. Source keys such as hasOwnProperty, toString and valueOf can then select shared inherited built-in function objects, and a nested value can overwrite a property of those objects process-wide. For example, making Object.prototype.hasOwnProperty.call non-callable causes subsequent uses, including i18next internals, to throw TypeError, resulting in unrecoverable denial of service and limited integrity…