Description
ApostropheCMS is an open-source Node.js content management system, and sanitize-html provides a simple HTML sanitizer with a clear API. From version 1.9.0 until version 2.17.7, packages/sanitize-html/index.js validates an animation value attribute as one flat URL and does not recognize that attributeName selecting href or xlink:href gives the sibling values, from, to, or by attribute SVG SMIL URL semantics. In configurations that allow the animate, animateColor, animateMotion, animateTransform, or set elements, a values list can begin with a safe fragment and contain a later executable destination that survives allowedSchemesAppliedToAttributes checking. When the sanitized SVG is rendered, the browser can copy that later destination into the live link, and a victim who activates the link can execute script in the application's origin. This issue is fixed in version 2.17.7.
Published: 2026-09-01
Score: 5.4 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The sanitizer in ApostropheCMS incorrectly processes the animation value attribute of SVG SMIL elements. It fails to detect that when the attribute name is href or xlink:href, the value contains a sequence of URLs, allowing a malicious payload that begins with a benign fragment and ends with an executable destination. When a browser processes the sanitized SVG, it resolves the later destination and executes script in the context of the web application, giving an attacker the ability to exfiltrate data, hijack sessions, or deface the site. This is a classic stored cross‑site scripting vulnerability with same‑origin payload execution.

Affected Systems

ApostropheCMS, a Node.js content management system, uses the sanitize‑html package. Versions from the initial release of 1.9.0 up through 2.17.7 are affected. The problem exists only when the sanitization configuration allows animate, animateColor, animateMotion, animateTransform, or set elements in user‑supplied content. All users of those versions, irrespective of deployment size, are in scope.

Risk and Exploitability

The CVSS base score of 5.4 signals a moderate severity. The exploit requires the attacker to deliver a malicious SVG fragment that contains the vulnerable attributes, which can be achieved through user uploads, editor input, or injected content. No exploitable public proof‑of‑concept is known, and the EPSS data is not available. The issue is not listed in CISA KEV, but the risk remains relevant for any application that accepts and renders SVG content without strict policy controls. Immediate patching or policy remediation is advised to eliminate the XSS vector.

Generated by OpenCVE AI on September 2, 2026 at 02:54 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the sanitize-html package to version 2.17.7 or later, which validates animation attribute values and rejects unsafe URI lists.
  • Disable or strip the animate, animateColor, animateMotion, animateTransform, and set elements from the content allowed by the sanitization policy, or configure sanitize-html to treat those tags as disallowed.
  • If an upgrade or policy change cannot be performed immediately, add a custom sanitization rule that enforces a single flat URL for the animation value attribute and blocks any additional URLs that appear in href or xlink:href attributes of SVG SMIL elements.

Generated by OpenCVE AI on September 2, 2026 at 02:54 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-g8qq-57p8-ggw5 ApostropheCMS: Stored XSS via SVG SMIL URI-list scheme-policy bypass
History

Tue, 01 Sep 2026 22:00:00 +0000

Type Values Removed Values Added
Description ApostropheCMS is an open-source Node.js content management system, and sanitize-html provides a simple HTML sanitizer with a clear API. From version 1.9.0 until version 2.17.7, packages/sanitize-html/index.js validates an animation value attribute as one flat URL and does not recognize that attributeName selecting href or xlink:href gives the sibling values, from, to, or by attribute SVG SMIL URL semantics. In configurations that allow the animate, animateColor, animateMotion, animateTransform, or set elements, a values list can begin with a safe fragment and contain a later executable destination that survives allowedSchemesAppliedToAttributes checking. When the sanitized SVG is rendered, the browser can copy that later destination into the live link, and a victim who activates the link can execute script in the application's origin. This issue is fixed in version 2.17.7.
Title ApostropheCMS: Stored XSS via SVG SMIL URI-list scheme-policy bypass
Weaknesses CWE-79
References
Metrics cvssV3_1

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


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-01T20:51:10.441Z

Reserved: 2026-09-01T16:27:58.129Z

Link: CVE-2026-84371

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-01T21:18:48.357

Modified: 2026-09-01T21:18:48.357

Link: CVE-2026-84371

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-02T03:00:13Z

Weaknesses
  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')