Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged content author
-
DeliverySubmit content with meta refresh tag
-
ExploitSanitizer retains unsafe refresh destination
-
ExecutionVictim renders stored content
-
ImpactScript executes or browser redirects in victim session
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 a NON-DEFAULT sanitize-html configuration that explicitly permits meta refresh elements along with their http-equiv and content attributes; default configurations are not affected. The attacker must also hold an account permitted to submit content (PR:L per the CVSS vector), and a victim must subsequently render the malicious content (UI:R). These factors - the non-default allow-list, required authenticated submission, and required victim interaction - collectively limit realistic exploitation to sites that have deliberately loosened the sanitizer's defaults. |
| Impact | This is a moderate-severity stored/reflected XSS (CWE-79) with a CVSS 3.1 base score of 5.4 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N). The network vector and low attack complexity are offset by three meaningful brakes: it requires some privilege (PR:L - an account able to submit content), it requires victim interaction (UI:R - someone must render the malicious content), and most importantly it only manifests under a NON-DEFAULT sanitize-html configuration that explicitly allows meta refresh elements plus their http-equiv and content attributes. No EPSS score was supplied, the CVE is not on the CISA KEV list, and no public proof-of-concept is referenced, so there is no public exploit identified at time of analysis. The scope change (S:C) correctly reflects that a sanitizer bypass lets attacker content execute in the victim's browser context. Net: this is a real but conditional defense-in-depth issue, not a drop-everything priority - its blast radius is limited to deployments that have deliberately loosened the default allow-list to permit meta refresh. Note also a data caveat: the provided 'source code evidence' commit diff contains only CI workflow and documentation changes and does NOT show the actual sanitize-html fix, so the patch content could not be independently verified from the supplied diff. |
| Exploit ScenarioDerived | On an ApostropheCMS instance whose sanitize-html allow-list has been customized to permit meta elements with http-equiv/content attributes, a low-privileged content contributor submits body content containing a meta refresh tag whose content value carries a javascript: or hostile redirect URL. When an administrator or another user later views that content, the retained refresh destination fires in their browser, enabling script execution or forced redirection. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 20, 2026
Stored cross-site scripting can occur in sites using sanitize-html before 2.18.0 when a non-default allow-list permits meta refresh elements and their http-equiv/content attributes, because unsafe script or redirect destinations in the refresh value are retained. ApostropheCMS deployments that bundle the affected library are in scope, but default sanitize-html configurations are not affected; exploitation requires an account able to submit content and a victim who renders it. The issue is fixed in sanitize-html 2.18.0, and no public exploit was identified at time of analysis.
RemediationAI
Upgrade sanitize-html to 2.18.0 or later; the vendor-released patch is sanitize-html 2.18.0, and ApostropheCMS users should deploy a CMS release that incorporates that fixed library version per https://github.com/apostrophecms/apostrophe/releases/tag/sanitize-html@2.18.0 and the advisory https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-cv27-6wvh-8x7j. If immediate upgrade is not possible, remove meta from the sanitizer's allowed tags and remove http-equiv and content from allowed attributes, or reject/sanitize refresh content so it cannot carry script URLs or attacker-controlled redirects; this breaks legitimate meta-refresh redirects and may affect accessibility or SEO workflows. Also restrict content submission privileges to trusted users as a compensating control, recognizing that this does not eliminate the need to patch.
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 sanitizer used by ApostropheCMS to filter user-supplied markup according to allow-lists. CVE-2026-113661 is a CWE-79 improper neutralization of input during web page generation: when an administrator or integrator opts into allowing <meta> refresh tags and the http-equiv/content attributes, the sanitizer can preserve a refresh content value containing script-bearing or attacker-controlled redirect destinations. The relevant CPEs identify both apostrophecms:sanitize-html and apostrophecms:apostrophe, reflecting the library and the CMS that consumes it; versions before 2.18.0 are affected. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, base 5.4) matches a stored/reflected XSS requiring authenticated content submission and victim interaction.
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
Authenticated content submission gives PR:L, victim rendering gives UI:R, and sanitizer bypass executing in the browser gives S:C with limited C/I and no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
ApostropheCMS is an open-source Node.js content management system, and sanitize-html provides a simple HTML sanitizer with a clear API. Prior to sanitize-html 2.18.0, a non-default configuration that allows meta refresh elements and their http-equiv and content attributes can retain unsafe script or redirect destinations embedded in the refresh content value. This issue is fixed in sanitize-html 2.18.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
Stored XSS in sanitize-html versions 1.9.0 through 2.17.6 allows authenticated low-privileged users to inject executable
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
EUVD-2026-105209
GHSA-cv27-6wvh-8x7j
NVD
CVE.org
EPSS
Exploit-DB