CVE-2026-113650

ApostropheCMS sanitize-html: unbounded recursion when re-sanitizing the fallback of a discarded iframe (stack overflow, nestingLimit not enforced)

Published Oct 20, 2026 CVSS 3.1 · 5.3 Medium EPSS < 1% KEV · Not listed
Description
ApostropheCMS is an open-source Node.js content management system. In sanitize-html 2.18.0, when an <iframe> is not allowed and disallowedTagsMode is 'discard' (the defaults), its raw-text content is re-sanitized by a recursive call to sanitizeHtml(text, options). The recursion has no bound and starts each nested call with a fresh state. This vulnerability is fixed in 2.18.1.

Analysis

AI-generated

Technical impact

In sanitize-html 2.18.0, an <iframe> tag that is not allowed is discarded, and its raw text is re‑sanitized by a recursive call to sanitizeHtml. Each recursive call starts with a fresh state and has no bound, creating an unbounded recursion that eventually causes a stack overflow. The effect is a denial of service because the Node.js process crashes when the recursion depth exceeds the system stack.

Affected Systems

The vulnerability occurs in ApostropheCMS, specifically in the sanitize-html module version 2.18.0 that is bundled with the apostrophecms:apostrophe and apostrophecms:sanitize-html packages. Version 2.18.1 and later contain the fix and are not affected.

Risk and Exploitability

The CVSS score of 5.3 indicates moderate severity, and the vulnerability is not listed in the CISA KEV catalog. The EPSS score is less than 1%, implying a very low but non‑zero likelihood of exploitation. An attacker appears to need the ability to supply or manipulate content that contains an iframe tag, such as through the CMS editor or API. When that content is processed, the recursive sanitization will exhaust the stack and terminate the application, resulting in a denial of service. No other direct exploitation vectors are described in the available information.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade sanitize-html to version 2.18.1 or later.
  • If an immediate upgrade is not possible, block or strip <iframe> elements before passing content to sanitizeHtml, for example by configuring a stricter whitelist or disabling the iframe tag altogether.
  • Add error handling around sanitizeHtml calls to catch stack overflows and restart or recover the application gracefully.

Generated by OpenCVE AI on October 22, 2026 at 20:29 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-c9rx-x947-fp3h ApostropheCMS sanitize-html: unbounded recursion when re-sanitizing the fallback of a discarded iframe (stack overflow, nestingLimit not enforced)
History
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
First Time appeared Apostrophecms
Apostrophecms apostrophecms
Apostrophecms sanitize-html
Vendors & Products Apostrophecms
Apostrophecms apostrophecms
Apostrophecms sanitize-html
Type Values Removed Values Added
Description ApostropheCMS is an open-source Node.js content management system. In sanitize-html 2.18.0, when an <iframe> is not allowed and disallowedTagsMode is 'discard' (the defaults), its raw-text content is re-sanitized by a recursive call to sanitizeHtml(text, options). The recursion has no bound and starts each nested call with a fresh state. This vulnerability is fixed in 2.18.1.
Title ApostropheCMS sanitize-html: unbounded recursion when re-sanitizing the fallback of a discarded iframe (stack overflow, nestingLimit not enforced)
Weaknesses CWE-674
References
Metrics cvssV3_1

{'score': 5.3, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L'}

Weaknesses
  • CWE-674

    Uncontrolled Recursion

  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
Oct 28, 2026, 2:02 PM
Reserved
Oct 20, 2026, 2:27 PM
Status
Deferred
Published
Oct 20, 2026, 5:17 PM
Modified
Oct 28, 2026, 2:16 PM
Severity
Moderate
Public date
Oct 20, 2026, 4:19 PM