{"id":"GHSA-45qg-252v-3f7p","revision":"9d076194e372493a9f7a678d47f739ca","records":[{"revision":"9d076194e372493a9f7a678d47f739ca","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-45qg-252v-3f7p","aliases":["CVE-2026-65841"],"title":"Jodit has cross-site scripting (XSS) via <script> nested in SVG that bypasses clean-html sanitization","description":"A `<script>` element placed directly inside an `<svg>` (or MathML) container was not removed by Jodit's clean-html sanitizer.\n\nThe deny/allow tag filter compared `node.nodeName` against an upper-cased tag hash, but foreign (SVG/MathML) elements preserve their original-case node names — an SVG script reports `\"script\"`, not `\"SCRIPT\"` — so the default `denyTags` list (which includes `script`) did not match it. The script therefore survived in the editor value and serialized output, where it could execute when the content was loaded back into a page or editor.\n\n### Proof of concept\n\n```html\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"400\" height=\"400\" viewBox=\"0 0 124 124\">\n  <rect width=\"124\" height=\"124\" rx=\"24\" fill=\"#000000\"></rect>\n  <script type=\"text/javascript\">alert(document.domain);</script>\n</svg>\n```\n\nLoad the payload into the editor (e.g. via source mode) and the `<script>` is preserved in `editor.value` and executes.\n\n### Impact\n\nStored / DOM cross-site scripting. An application that persists editor output and later renders or re-opens it in Jodit can have attacker-supplied script run in a victim's (e.g. an administrator's) authenticated browser context.\n\n### Patch\n\nFixed in **4.13.6**: the deny/allow lookup now normalises the tag name to upper case before matching, so a foreign namespace can no longer bypass the filter, while `allowTags` is still honoured.\n\n### Workaround\n\nUpgrade to 4.13.6 or later. Server-side sanitization of stored HTML mitigates in the interim.\n\n### Credit\n\nReported by Roman Kis (@CrownKingClown).","state":0,"publishedAt":"2026-07-31T19:15:57+00:00","modifiedAt":"2026-07-31T19:41:43.225459+00:00","affected":[{"ecosystem":"npm","name":"jodit","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"4.13.6"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/xdan/jodit/security/advisories/GHSA-45qg-252v-3f7p","https://github.com/xdan/jodit/commit/49a31f451f6b686f5610022a1d4406ee85138dc5","https://github.com/xdan/jodit","https://github.com/xdan/jodit/releases/tag/4.13.6"],"sourceUrl":"https://github.com/advisories/GHSA-45qg-252v-3f7p","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-45qg-252v-3f7p","identifiers":["GHSA-45qg-252v-3f7p","CVE-2026-65841"]},"retained":false,"historicalAffected":[]}],"coverage":[]}