Skip to main content

ApostropheCMS CVE-2026-112958

| EUVDEUVD-2026-105171 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-20 GitHub_M GHSA-7jg5-frgc-c67w
5.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged editor
  2. Delivery
    Enter crafted quote-bearing style value
  3. Exploit
    Store value in free-form widget style field
  4. Execution
    Higher-privileged user renders content
  5. Impact
    Injected attributes execute in victim browser

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 concrete conditions, all confirmed by the vendor changeset: (1) the specific project must define a free-form 'string' widget style field rendered inline (no 'selector'), since the vendor states only such projects are affected; (2) the attacker must hold editor permission to edit that widget (PR:L), so this is not anonymous/unauthenticated; and (3) the malicious content must be rendered to a victim - either published content viewed by site visitors or an affected draft viewed by a higher-privileged user (UI:R). The injected quote terminates the inline 'style' attribute and adds executable HTML attributes to the wrapper element. Limiting factors that reduce real-world exposure: non-default configuration (free-form style field must exist), mandatory authentication as a content editor, and dependence on another user rendering the attacker-controlled content.

Impact

This is a moderate-severity stored cross-site scripting flaw (CWE-79/CWE-116, CVSS 5.4) that reads as a genuine but not urgent issue. The CVSS vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) is internally consistent with the description: network-reachable, low complexity, but requiring an authenticated low-privileged editor (PR:L) and a victim rendering the content (UI:R), with a scope change (S:C) because editor-controlled input crosses into the rendered page served to other users. No EPSS score, CISA KEV listing, or public POC is present in the provided intelligence - per precision rules this is 'no public exploit identified at time of analysis.' The real-world risk is further constrained because exploitation is only possible when a project defines a free-form style field (the fix changeset explicitly states 'Only projects that define a free-form style field are affected'), making this dependent on a non-default project configuration rather than an out-of-the-box weakness. The limited C:L/I:L and no availability impact reflect typical stored-XSS consequences (session/UI manipulation for the victim) rather than full compromise. Net: a legitimate privilege-escalation-flavored XSS worth patching, but not a widespread mass-exploitation priority given the authentication requirement, configuration dependency, and absence of exploitation signals.

Exploit ScenarioDerived

An attacker with low-privileged content-editor access to an ApostropheCMS 4.x site that defines a free-form widget style field enters a value containing a quote character, which prematurely terminates the inline style attribute and injects additional HTML attributes into the rendered wrapper element. When the published content (or an affected draft) is later viewed by another user - including a higher-privileged reviewer - the injected attributes execute in that victim's browser context. No public POC was identified in the provided data.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 20, 2026

Stored cross-site scripting in ApostropheCMS versions before 4.34.0 allows an authenticated content editor to break out of an inline style attribute and add executable HTML attributes when a project-defined free-form widget style field is rendered. Published content viewed by visitors or an affected draft viewed by a higher-privileged user can trigger the injected attributes; the issue requires a non-default inline style field and victim interaction, and no public exploit was identified at time of analysis. The CVSS 5.4 rating reflects changed scope with limited confidentiality and integrity impact.

RemediationAI

Vendor-released patch: upgrade ApostropheCMS to 4.34.0 or later, which applies HTML-attribute escaping to all values rendered by getWidgetAttributes() and apos.styles.attributes(); see the advisory at https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-7jg5-frgc-c67w and release notes at https://github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.34.0. If upgrading is not immediately possible, remove or replace project-defined free-form string widget style fields with constrained field types or selector-based styles, accepting loss of free-form styling, and restrict widget-editing permissions to trusted editors because exploitation requires content-edit rights. A Content Security Policy that disallows inline event handlers and inline scripts can reduce the impact of injected attributes, but it may break legitimate inline script or style usage and is only a compensating control.

Affected VersionsENISA

Apostrophe < 4.34.0

Affected Packages

npm apostrophe fix: 4.34.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ApostropheCMS is a Node.js content management system whose widget rendering builds wrapper elements through getWidgetAttributes() and the apos.styles.attributes() helper. In affected releases, values from project-defined style fields were written into the wrapper's style and class attributes without HTML-attribute encoding. A free-form string style field could therefore carry an editor-controlled quote that terminates the style attribute and introduces additional attributes, producing stored XSS (CWE-79) through improper encoding and escaping (CWE-116). The CPE cpe:2.3:a:apostrophecms:apostrophe:*:*:*:*:*:*:*:* tracks the Apostrophe package before the 4.34.0 fix; exploitation is gated by editor privileges, a project-specific inline free-form style field, and rendering by another user, matching CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N.

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

Vendor (GitHub_M) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

Authenticated editor is required so PR:L (never PR:N); victim must render the content giving UI:R; stored script crosses into another user's browser so S:C with limited C:L/I:L and no availability impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 20, 2026 - 18:17 EUVD

DescriptionCVE.org

ApostropheCMS is an open-source Node.js content management system. Prior to 4.34.0, a project-defined free-form widget style field can carry an editor-controlled quote into an inline style attribute because the wrapper serializer does not apply HTML-attribute encoding. The quote can terminate the style attribute and inject executable attributes when published content, or an affected draft viewed by a higher-privileged user, is rendered. This issue is fixed in version 4.34.0.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 5 npm packages depend on apostrophe (5 direct, 0 indirect)

Ecosystem-wide dependent count for version 4.34.0.

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Low
niche open-source Node.js CMS, limited enterprise footprint
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA CIRCL GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2026-63669 MEDIUM POC
6.5 Aug 17

Integrity bypass in ApostropheCMS page management allows authenticated low-privileged editors to move pages into restric

CVE-2026-63670 MEDIUM POC
6.1 Aug 17

Stored cross-site scripting in ApostropheCMS prior to 2.17.6 enables execution of arbitrary JavaScript in victim browser

CVE-2014-125128 MEDIUM POC
6.1 Sep 08

'sanitize-html' prior to version 1.0.3 is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1), th

CVE-2019-25225 MEDIUM POC
6.1 Sep 08

`sanitize-html` prior to version 2.0.0-beta is vulnerable to Cross-site Scripting (XSS). Rated medium severity (CVSS 6.1

CVE-2021-25979 CRITICAL
9.8 Nov 08

Apostrophe CMS versions prior to 3.3.1 did not invalidate existing login sessions when disabling a user account or chang

CVE-2026-84371 MEDIUM POC
5.4 Sep 01

Stored XSS in sanitize-html versions 1.9.0 through 2.17.6 allows authenticated low-privileged users to inject executable

CVE-2024-21501 MEDIUM POC
5.3 Feb 24

Versions of the package sanitize-html before 2.12.1 are vulnerable to Information Exposure when used on the backend and

CVE-2021-26540 MEDIUM POC
5.3 Feb 08

Apostrophe Technologies sanitize-html before 2.3.2 does not properly validate the hostnames set by the "allowedIframeHos

CVE-2021-26539 MEDIUM POC
5.3 Feb 08

Apostrophe Technologies sanitize-html before 2.3.1 does not properly handle internationalized domain name (IDN) which co

CVE-2026-53609 CRITICAL
9.1 Jun 12

Prototype pollution in ApostropheCMS versions up to and including 4.30.0 allows an authenticated editor to poison Object

CVE-2026-53608 HIGH
8.7 Jun 12

Stored cross-site scripting in the @apostrophecms/seo plugin (versions ≤1.4.2) allows any user holding the default edito

CVE-2026-35569 HIGH
8.7 Apr 15

Stored cross-site scripting in ApostropheCMS SEO fields permits an authenticated attacker to inject arbitrary JavaScript

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy