# CVE-2026-113650: sanitize-html unbounded recursion denial of service

Source: https://junglewise.ai/threats/cve-2026-113650-apostrophecms-is-an-open-source-node-js-content-management  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-10-20. Updated: 2026-10-20  
License: CC BY 4.0 with a link back

CVE-2026-113650 · Severity: medium · CVSS 5.3 · Published 2026-10-20

The sanitize-html library, used by ApostropheCMS to clean user-supplied HTML content, has a denial-of-service vulnerability when processing disallowed iframe tags. An attacker can craft malicious HTML that causes the sanitizer to recurse indefinitely with no depth limit, consuming CPU and memory until the application becomes unresponsive or crashes.

Technologies: [sanitize-html (npm)](https://junglewise.ai/threats/technologies/sanitize-html). Vendors: [npm](https://junglewise.ai/threats/vendors/npm).

## Quick answers

**Is CVE-2026-113650 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-113650 being exploited in the wild.

**How severe is CVE-2026-113650?** Medium severity, with a CVSS score of 5.3, published 20 October 2026.

**Which products and versions are affected?** Jzwolak Sanitize-Html 2.18.0; sanitize-html (npm) >= 2.18.0, < 2.18.1, SEMVER:introduced=2.18.0,fixed=2.18.1.

**Is there a fix for CVE-2026-113650?** Yes. sanitize-html (npm): upgrade to 2.18.1 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-113650 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-113650?** Check whether you run Jzwolak Sanitize-Html or sanitize-html (npm) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- sanitize-html (npm): upgrade to 2.18.1 or later

  ```sh
  npm install sanitize-html@2.18.1
  ```


## Technical details

When sanitize-html 2.18.0 encounters an iframe tag that is not allowed and disallowedTagsMode is set to 'discard' (the default), it recursively sanitizes the iframe's raw-text content by calling sanitizeHtml() again. The recursion has no bound and each nested call starts with a fresh state, allowing an attacker to craft nested iframe content that triggers infinite recursion. An attacker with ability to submit content processed by the library (network vector via web input) can cause denial of service.

## Affected products

- jzwolak sanitize-html 2.18.0

## Identifiers

- CVE-2026-113650
- GHSA-c9rx-x947-fp3h

## Timeline

- 2026-10-20: disclosed

## References

- [https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498](https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498)
- [https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea](https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea)

## Related threats

- [sanitize-html incomplete : meta refresh URL scheme bypass](https://junglewise.ai/threats/cve-2026-113661-apostrophecms-incomplete-meta-http-equiv-refresh-content-still)
- [ApostropheCMS sanitize-html: SMIL animation namespace-prefix bypass allows javascript: URI injection (XSS)](https://junglewise.ai/threats/cve-2026-113657-apostrophecms-is-an-open-source-node-js-content-management)
- [sanitize-html noscript XSS bypass](https://junglewise.ai/threats/cve-2026-113654-apostrophecms-is-an-open-source-node-js-content-management)
- [sanitize-html stored XSS via SVG SMIL URI-list scheme bypass](https://junglewise.ai/threats/cve-2026-84371-sanitize-html-stored-xss-via-svg-smil-uri-list-scheme-bypass)
- [sanitize-html XSS bypass via textarea solidus close tag](https://junglewise.ai/threats/cve-2026-63670-sanitize-html-xss-bypass-via-textarea-solidus-close-tag)
