GHSA-5957-5c94-3v7w
Jodit has prototype pollution via Jodit.configure() / ConfigMerge
Packages
Details
As written in the advisory (Markdown source, shown as plain text).
### 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":"yes"}}}'));
console.log(({}).polluted); // "yes" (before the fix)
delete Object.prototype.polluted;
```
### Impact
Applications that pass user-controlled or partially user-controlled configuration into `Jodit.configure()` could be vulnerable to prototype pollution: unexpected property injection, logic bypass, denial of service, or secondary security issues.
### Patch
Fixed in 4.12.18 by rejecting `__proto__`, `constructor`, and `prototype` at every merge level in `ConfigMerge` and `ConfigProto`.
### Credit
Responsibly reported by Junming Wu.
References
External links from the advisory. They lead to third-party sites.