Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain editor account on target site
-
DeliveryOpen SEO settings in admin UI
-
ExploitSubmit malicious tracking ID payload
-
InstallPayload persisted in CMS config
-
C2Visitor loads any page
-
ExecuteInline script executes in visitor browser
-
ImpactSteal session cookies or pivot to admin
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 | Attacker must hold a user account with editor-level role (the default role assigned to content managers in ApostropheCMS) on the target installation, and the @apostrophecms/seo plugin must be installed and the SEO fields exposed in the admin UI. Exploitation also requires that a victim subsequently load any page on the site after the malicious tracking ID is saved - automatic for site visitors during normal browsing, so this is a low bar. Limiting factors: single-administrator deployments where no other accounts hold editor rights are not exploitable, and sites that do not install the SEO plugin or that hardcode tracking IDs outside the CMS UI are unaffected. |
| Impact | The vendor CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N, base 8.7) reflects a network-reachable stored XSS executed in a changed scope (visitor browser) with high confidentiality and integrity impact, requiring only the default editor role. No EPSS score, KEV listing, or public POC was provided in the input, suggesting this is a high-CVSS issue without confirmed mass exploitation yet - but the trust model of multi-tenant or community-contributor ApostropheCMS deployments makes the PR:L barrier effectively trivial, and the lack of a patch elevates real-world urgency. UI:R is debatable: visitor page loads are normal usage and arguably warrant UI:N for stored XSS, which would push the true risk slightly higher than the published score. |
| Exploit ScenarioDerived | An attacker who obtains or is granted editor credentials (the default content-manager role) navigates to the SEO configuration UI and sets seoGoogleTrackingId to a payload such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 12, 2026
Stored cross-site scripting in the @apostrophecms/seo plugin (versions ≤1.4.2) allows any user holding the default editor role to inject arbitrary JavaScript that executes in every visitor's browser. The seoGoogleTrackingId and seoGoogleTagManager fields are interpolated directly into inline <script> tag bodies via template literals with no sanitization, turning legitimate analytics configuration into a persistent payload delivery channel. No public exploit identified at time of analysis, and no vendor-released patch identified at time of analysis.
RemediationAI
No vendor-released patch identified at time of analysis; the advisory at https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-wf43-fpp3-cf65 explicitly states no patched version is yet available. As compensating controls until a fix ships: restrict the editor role to highly trusted users only and audit current holders, since editor is the default content-manager role and is the abuse vector; remove or disable the @apostrophecms/seo module if Google Analytics/Tag Manager are not required, accepting loss of integrated SEO management; if analytics are required, hardcode seoGoogleTrackingId and seoGoogleTagManager values in server-side configuration outside the CMS UI rather than via editor-managed fields; and deploy a strict Content Security Policy that forbids inline script execution (script-src without 'unsafe-inline'), noting this will break any other inline scripts the theme relies on and requires nonce/hash refactoring. Monitor the advisory URL for the patched release.
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
The affected component is the @apostrophecms/seo plugin for ApostropheCMS, a Node.js-based open-source content management system (CPE: cpe:2.3:a:apostrophecms:@apostrophecms/seo). The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation) realized through unsanitized JavaScript template literal interpolation: user-supplied values intended as opaque identifiers (e.g., 'UA-XXXXX' or 'GTM-XXXXX') are written directly inside <script>…</script> blocks rendered on every page. Because the injection point is already inside an executing JavaScript context, attackers do not even need to break out of an HTML attribute - any characters supplied become live code at parse time.
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:H/I:H/A:N
Editor role required (PR:L); stored XSS executes during normal browsing so UI:N rather than UI:R; scope changes from CMS to visitor browser (S:C) with high C/I impact, no availability impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
ApostropheCMS is an open-source Node.js content management system. Versions up to and including 1.4.2 of the @apostrophecms/seo package injects the Google Analytics Tracking ID (seoGoogleTrackingId) and Google Tag Manager ID (seoGoogleTagManager) directly into <script> tag bodies using JavaScript template literals without any sanitization or validation. Any user with editor-level access (the default role for content managers) can set these fields to a malicious value, resulting in stored XSS that executes on every page for every visitor of the site. As of time of publication, no known patched versions are available.
Executive ViewAI
The @apostrophecms/seo plugin (versions 1.4.2 and earlier) allows any editor-level user to inject persistent malicious JavaScript that executes in every visitor's browser through unsanitized Google Analytics and Tag Manager configuration fields. Organizations using ApostropheCMS face direct risk of visitor data theft, malware distribution, and website compromise without vendor patch availability.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Restrict editor role access to trusted personnel only; (2) Disable or remove the seoGoogleTrackingId and seoGoogleTagManager input fields from the CMS interface; (3) Deploy Content Security Policy headers blocking inline script execution; (4) Implement Web Application Firewall rules to detect anomalous tracking code injections; (5) Enable comprehensive audit logging of all editor configuration changes and review logs weekly.
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 ApostropheCMS SEO fields permits an authenticated attacker to inject arbitrary JavaScript
Unauthenticated denial of service in ApostropheCMS versions prior to 4.33.0, where the Rich Text CSV conversion route st
EUVD-2026-36589
GHSA-wf43-fpp3-cf65
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB