jodit
Ecosystem: npm
Downloads: 909.6 K
- 0CriticalAffects 0 versions
- 1HighAffects 1 version
- 0MediumAffects 0 versions
- 5ModerateAffects 5 versions
- 0LowAffects 0 versions
- Critical0 (0.0%)
- High1 (16.7%)
- Medium0 (0.0%)
- Moderate5 (83.3%)
- Low0 (0.0%)
Monthly breakdown
- Critical
- High
- Medium
- Moderate
- Low
- 4 vulnerabilities
- Critical: 0
- High: 1
- Medium: 0
- Moderate: 3
- Low: 0
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 0
- 1 vulnerabilities
- Critical: 0
- High: 0
- Medium: 0
- Moderate: 1
- Low: 0
Vulnerabilities (6)
Known vulnerabilities affecting jodit, based on data from OSV.
| ID | Severity | Summary | Affected versions | Published | Source |
|---|---|---|---|---|---|
| GHSA-45qg-252v-3f7p | Moderate | Jodit has cross-site scripting (XSS) via <script> nested in SVG that bypasses clean-html sanitizationA `<script>` element placed directly inside an `<svg>` (or MathML) container was not removed by Jodit's clean-html sanitizer. The 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. ### Proof of concept ```html <svg |
| GitHub (opens in a new tab) | |
| GHSA-5957-5c94-3v7w | Moderate | Jodit has prototype pollution via Jodit.configure() / ConfigMerge### Summary `Jodit.configure(options)` — and the internal `ConfigMerge` / `ConfigProto` helpers — merged user-supplied options into the editor configuration without filtering prototype-mutating keys. A payload nested under an existing plain-object option such as `controls` could reach and mutate `Object.prototype` (prototype pollution). ### Affected - Package: `jodit` (npm) - Versions: `< 4.12.18` - Public API: `Jodit.configure(options)` ### Proof of Concept ```js import { Jodit } from 'jodit'; delete Object.prototype.polluted; Jodit.configure(JSON.parse('{"controls":{"__proto__":{"polluted" |
| GitHub (opens in a new tab) | |
| GHSA-j839-gqq4-gf9j | Moderate | Jodit has incomplete javascript: scheme normalization in sanitizeHTMLElement href check that allows link XSS### Summary jodit's `sanitizeHTMLElement` neutralizes a `javascript:` `href` using a bare `href.trim().indexOf('javascript') === 0` check. This omits the normalization jodit applies to every other URL attribute: `isDangerousUrl` strips control bytes with `value.replace(/[\u0000-\u0020]+/g, '')` and lowercases the value before testing the scheme. Because the `href` check does neither, it is bypassed by three obfuscation classes, all confirmed firing on click against the shipped 4.12.30 build: 1. Case variants: `JAVASCRIPT:`, `Javascript:`, `jaVaScRiPt:` (the check is case-sensitive). 2. A lea |
| GitHub (opens in a new tab) | |
| GHSA-rxcw-mc6f-6hr3 | High | Jodit Editor: Mutation XSS in jodit clean-html via a MathML/style rawtext carrier### Summary jodit's built-in `clean-html` sanitizer can be bypassed by a MathML/`<style>` carrier that hides a dangerous element from the sanitizer's element walk, so a no-interaction event handler survives into the editor value. When an application supplies attacker-influenced HTML to the editor's value-set or insertion paths, the sanitized output still contains a live `<img ... onload=...>` (or another non-`onerror` handler such as `onfocus`). A consumer that renders that output (`element.innerHTML = editor.value`) executes the handler with no user interaction. This is a stored cross-site sc |
| GitHub (opens in a new tab) | |
| GHSA-vpmm-x3fm-qr5c | Moderate | jodit: Prototype pollution in Jodit via Jodit.modules.Helpers.set()### Summary `Jodit.modules.Helpers.set(chain, value, obj)` walks the dot-separated `chain`, creating and following each path segment, without filtering prototype-mutating keys. A chain that begins with (or contains) `__proto__`, `constructor`, or `prototype` lets the final assignment reach and mutate `Object.prototype` (prototype pollution). ### Affected - Package: `jodit` (npm) - Versions: `< 4.12.26` - Public API: `Jodit.modules.Helpers.set(chain, value, obj)` ### Proof of Concept ```js const { Jodit } = require('jodit'); delete Object.prototype.polluted; Jodit.modules.Helpers.set('__proto |
| GitHub (opens in a new tab) | |
| GHSA-42hx-vrxx-5r6v | Moderate | Jodit Editor vulnerable to Cross-site ScriptingJodit Editor is a WYSIWYG editor written in pure TypeScript without the use of additional libraries. Jodit Editor is vulnerable to XSS attacks when pasting specially constructed input. This issue has not been fully patched. There are no known workarounds. |
| GitHub (opens in a new tab) |
- GHSA-45qg-252v-3f7pModerateJodit has cross-site scripting (XSS) via <script> nested in SVG that bypasses clean-html sanitization
< 4.13.6
A `<script>` element placed directly inside an `<svg>` (or MathML) container was not removed by Jodit's clean-html sanitizer. The 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. ### Proof of concept ```html <svg
CVE: CVE-2026-65841
- GHSA-5957-5c94-3v7wModerateJodit has prototype pollution via Jodit.configure() / ConfigMerge
< 4.12.18
### Summary `Jodit.configure(options)` — and the internal `ConfigMerge` / `ConfigProto` helpers — merged user-supplied options into the editor configuration without filtering prototype-mutating keys. A payload nested under an existing plain-object option such as `controls` could reach and mutate `Object.prototype` (prototype pollution). ### Affected - Package: `jodit` (npm) - Versions: `< 4.12.18` - Public API: `Jodit.configure(options)` ### Proof of Concept ```js import { Jodit } from 'jodit'; delete Object.prototype.polluted; Jodit.configure(JSON.parse('{"controls":{"__proto__":{"polluted"
CVE: CVE-2026-54756
- GHSA-j839-gqq4-gf9jModerateJodit has incomplete javascript: scheme normalization in sanitizeHTMLElement href check that allows link XSS
< 4.12.31
### Summary jodit's `sanitizeHTMLElement` neutralizes a `javascript:` `href` using a bare `href.trim().indexOf('javascript') === 0` check. This omits the normalization jodit applies to every other URL attribute: `isDangerousUrl` strips control bytes with `value.replace(/[\u0000-\u0020]+/g, '')` and lowercases the value before testing the scheme. Because the `href` check does neither, it is bypassed by three obfuscation classes, all confirmed firing on click against the shipped 4.12.30 build: 1. Case variants: `JAVASCRIPT:`, `Javascript:`, `jaVaScRiPt:` (the check is case-sensitive). 2. A lea
CVE: CVE-2026-62324
- GHSA-rxcw-mc6f-6hr3HighJodit Editor: Mutation XSS in jodit clean-html via a MathML/style rawtext carrier
< 4.12.28
### Summary jodit's built-in `clean-html` sanitizer can be bypassed by a MathML/`<style>` carrier that hides a dangerous element from the sanitizer's element walk, so a no-interaction event handler survives into the editor value. When an application supplies attacker-influenced HTML to the editor's value-set or insertion paths, the sanitized output still contains a live `<img ... onload=...>` (or another non-`onerror` handler such as `onfocus`). A consumer that renders that output (`element.innerHTML = editor.value`) executes the handler with no user interaction. This is a stored cross-site sc
CVE: CVE-2026-58263
- GHSA-vpmm-x3fm-qr5cModeratejodit: Prototype pollution in Jodit via Jodit.modules.Helpers.set()
< 4.12.26
### Summary `Jodit.modules.Helpers.set(chain, value, obj)` walks the dot-separated `chain`, creating and following each path segment, without filtering prototype-mutating keys. A chain that begins with (or contains) `__proto__`, `constructor`, or `prototype` lets the final assignment reach and mutate `Object.prototype` (prototype pollution). ### Affected - Package: `jodit` (npm) - Versions: `< 4.12.26` - Public API: `Jodit.modules.Helpers.set(chain, value, obj)` ### Proof of Concept ```js const { Jodit } = require('jodit'); delete Object.prototype.polluted; Jodit.modules.Helpers.set('__proto
CVE: CVE-2026-55886
- GHSA-42hx-vrxx-5r6vModerateJodit Editor vulnerable to Cross-site Scripting
<= 3.24.2
Jodit Editor is a WYSIWYG editor written in pure TypeScript without the use of additional libraries. Jodit Editor is vulnerable to XSS attacks when pasting specially constructed input. This issue has not been fully patched. There are no known workarounds.
CVE: CVE-2022-23461