CVE-YYYY-NNNNN with a CVSS score of 6.4 is a CWE-79 and CWE-1321 vulnerability affecting @tiptap/core versions >= 2.0.0-alpha.0, < 3.30.4 affecting @tiptap/core versions The unsafe assignment was introduced in commit `ecadf7ea0a7f8f39a8496a60edf0ac8f379e6eb3` and is present in the first package tag `@tiptap/core@2 in the @tiptap/core package, specifically in its public mergeAttributes helper that uses ordinary bracket assignment on keys returned by Object.entries. This allows an own __proto__ key from JSON to invoke the legacy prototype setter on the fresh merged object, resulting in a prototype-manipulated result. The function returns an object whose prototype is attacker-controlled, while Object.keys and ordinary own-property checks show no attacker attributes. When this result is used as a ProseMirror DOMOutputSpec attribute object, prosemirror-model's DOMSerializer.renderSpec enumerates it with for...in and applies inherited values with setAttribute. In a browser proof, inherited src and onerror values were copied to an <img> and the error handler executed once. This is per-object prototype manipulation; the proof does not modify global Object.prototype. Applications that merge untrusted imported document, plugin, CMS, API, tenant, or AI-derived attribute objects can receive this manipulated result, which can be exploited by enumerating inherited keys, including ProseMirror's DOM serializer, to turn hidden properties into DOM attributes and execute JavaScript in the application's origin.
We recommend you to update Tiptap to version 3.30.4.[/subscribe_to_unlock_form]
CVE-YYYY-NNNNN with a CVSS score of 6.4 is a CWE-79 and CWE-1321 vulnerability affecting @tiptap/core versions >= 2.0.0-alpha.0, < 3.30.4 affecting @tiptap/core versions The unsafe assignment was introduced in commit `ecadf7ea0a7f8f39a8496a60edf0ac8f379e6eb3` and is present in the first package tag `@tiptap/core@2 in the @tiptap/core package, specifically in its public mergeAttributes helper that uses ordinary bracket assignment on keys returned by Object.entries. This allows an own __proto__ key from JSON to invoke the legacy prototype setter on the fresh merged object, resulting in a prototype-manipulated result. The function returns an object whose prototype is attacker-controlled, while Object.keys and ordinary own-property checks show no attacker attributes. When this result is used as a ProseMirror DOMOutputSpec attribute object, prosemirror-model's DOMSerializer.renderSpec enumerates it with for...in and applies inherited values with setAttribute. In a browser proof, inherited src and onerror values were copied to an <img> and the error handler executed once. This is per-object prototype manipulation; the proof does not modify global Object.prototype. Applications that merge untrusted imported document, plugin, CMS, API, tenant, or AI-derived attribute objects can receive this manipulated result, which can be exploited by enumerating inherited keys, including ProseMirror's DOM serializer, to turn hidden properties into DOM attributes and execute JavaScript in the application's origin.
We recommend you to update Tiptap to version 3.30.4.[emaillocker id="1283"]
The following reports contain further technical details:
[/emaillocker]