Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAuthenticate as low-privilege content contributor
-
DeliveryCraft SVG with SMIL animate element using attributeName=href and semicolon-separated values list
-
ExploitSubmit content processed by sanitize-html with animation tags enabled
-
InstallLeading fragment passes scheme check; javascript: entry survives sanitization
-
C2Stored payload served to victim
-
ExecuteVictim clicks rendered SVG link
-
ImpactJavaScript executes in application's browser origin
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) |
| Impact | The vendor-assigned CVSS 3.1 score is 5.4 (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N). The AC:L metric likely overstates ease of exploitation: the vulnerability activates only when SVG animation elements are explicitly added to |
| Exploit ScenarioDerived | An attacker with contributor-level access submits a crafted SVG containing |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Stored XSS in sanitize-html versions 1.9.0 through 2.17.6 allows authenticated low-privileged users to inject executable JavaScript via SVG SMIL animation elements that survive the library's scheme-policy sanitization. The sanitizer validates the values attribute as a single flat URL, missing that attributeName="href" gives values URI-list semantics under SVG SMIL; a payload of #safe;javascript:alert(1) passes the scheme check on its leading fragment while the javascript: entry survives intact. When a victim clicks the rendered link, the browser resolves the later entry and executes script in the application's origin. A working proof-of-concept is publicly disclosed in the GHSA advisory; no CISA KEV listing at time of analysis.
RemediationAI
Upgrade sanitize-html to version 2.17.7 or later, which rejects attributeName values targeting href or xlink:href on SVG animate and set elements, preventing URI-list bypass. The patch is available at PR #5552 and commit 1135516a1a4a8f9638641c460488a43d8af20081 in the ApostropheCMS repository. If an immediate upgrade is not feasible, remove animate, animateColor, animateMotion, animateTransform, and set from the allowedTags configuration; this eliminates the attack surface entirely with no impact to non-animation SVG content. Do not treat allowedSchemesAppliedToAttributes coverage of the values attribute alone as a sufficient workaround - that is precisely the check being bypassed. Default sanitize-html configurations (which omit SVG animation elements) require no action.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
sanitize-html is a Node.js HTML sanitization library (npm) that strips disallowed tags and attributes from user-provided HTML using a configurable allowlist. The root cause (CWE-79) lies in index.js:371-383, which validates animation value attributes (values, from, to, by) as single flat URLs against allowedSchemesAppliedToAttributes. SVG SMIL animation elements (animate, animateColor, animateMotion, animateTransform, set) support a semicolon-separated values list that, when attributeName targets href or xlink:href, functions as a sequence of URL destinations the browser traverses. The sanitizer lacks awareness of this list semantics: only the first token is scheme-checked, and subsequent entries containing javascript: pass through unmodified. The NVD CPE (cpe:2.3:a:apostrophecms:apostrophe) points to the parent CMS monorepo rather than the standalone sanitize-html npm package, which is the actual vulnerable artifact.
Know when Apostrophecms gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
AC:H reflects the non-default SVG animation configuration required to trigger the flaw; all other metrics align with the vendor-assigned vector.
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
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.
Blast Radius
ecosystem impact- 2 npm packages depend on sanitize-html (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 1.9.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
More in Apostrophecms
View allIntegrity bypass in ApostropheCMS page management allows authenticated low-privileged editors to move pages into restric
Stored cross-site scripting in ApostropheCMS prior to 2.17.6 enables execution of arbitrary JavaScript in victim browser
'sanitize-html' prior to version 1.0.3 is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1), th
`sanitize-html` prior to version 2.0.0-beta is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1
Apostrophe CMS versions prior to 3.3.1 did not invalidate existing login sessions when disabling a user account or chang
Versions of the package sanitize-html before 2.12.1 are vulnerable to Information Exposure when used on the backend and
Apostrophe Technologies sanitize-html before 2.3.2 does not properly validate the hostnames set by the "allowedIframeHos
Apostrophe Technologies sanitize-html before 2.3.1 does not properly handle internationalized domain name (IDN) which co
Prototype pollution in ApostropheCMS versions up to and including 4.30.0 allows an authenticated editor to poison Object
Stored cross-site scripting in the @apostrophecms/seo plugin (versions ≤1.4.2) allows any user holding the default edito
Stored cross-site scripting in ApostropheCMS SEO fields permits an authenticated attacker to inject arbitrary JavaScript
Unauthenticated HTTP requests to ApostropheCMS import-export module routes before version 3.7.0 can force the server to
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Linux Enterprise Micro 5.3 | Affected |
| SUSE Linux Enterprise Micro 5.4 | Affected |
| SUSE Linux Enterprise Micro 5.5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP7 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Micro 6.0 | Affected |
| SUSE Linux Micro 6.1 | Affected |
| SUSE Linux Micro 6.2 | Affected |
| SUSE Manager Client Tools 15 | Affected |
| SUSE Manager Client Tools for SLE 15 | Affected |
| SUSE Multi-Linux Manager Client Tools for SLE 15 | Affected |
| openSUSE Leap 16.0 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Manager Proxy Module 4.3 | Affected |
| SUSE Enterprise Storage 6 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| SUSE Manager Proxy LTS 4.3 | Affected |
| SUSE Manager Proxy Module 4.1 | Affected |
| SUSE Manager Proxy Module 4.2 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
| openSUSE Leap Micro 5.5 | Affected |
| SUSE Multi Linux Manager Tools SLE-15 | Affected |
| ses/7.1/ceph/prometheus-server ses/7/ceph/prometheus-server suse/multi-linux-manager/5.2/x86_64/monitoring-prometheus | Affected |
EUVD-2026-69654
GHSA-g8qq-57p8-ggw5
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB