Skip to main content

ApostropheCMS EUVDEUVD-2026-105154

| CVE-2026-112951 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-20 GitHub_M GHSA-vmgj-9cwm-cf3h
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 editor with color field access
  2. Delivery
    Submit value with valid color prefix plus trailing HTML
  3. Exploit
    Payload stored past TinyColor validation
  4. Execution
    Victim renders published page
  5. Impact
    Script executes in victim browser context

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

Requires an authenticated user holding edit rights on content that uses a color field - specifically, per the vendor changeset, a widget style color field rendered inline (no selector) whose value is written into the wrapper's style attribute. The attacker crafts a value beginning with a valid rgb()/hsl() color prefix and appends arbitrary HTML, exploiting that TinyColor validation only requires a valid color substring rather than a full match. Exploitation is LIMITED by: (1) the need for a valid authenticated account with content-edit privileges (PR:L), (2) the requirement that a victim subsequently render/view the stored value (UI:R), and (3) the project defining and inline-rendering such a free-form color/style field. Payload execution occurs in the victim's browser on versions prior to 4.34.0.

Impact

This is a moderate-severity stored XSS (CWE-79) with a self-consistent CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N vector scoring 5.4. The signals point to a real but low-urgency issue rather than a mass-exploitation priority. PR:L confirms an attacker must already hold an authenticated account with content-edit rights, and UI:R means a victim must subsequently render/view the poisoned content, both of which sharply narrow the exploit population to insiders or compromised editor accounts. S:C and C:L/I:L reflect classic XSS browser-context impact (session/UI manipulation) rather than direct server compromise, and A:N confirms no availability effect. There is no KEV listing, no public POC referenced, and no EPSS score supplied, so exploitation probability cannot be quantified from the input but all available evidence indicates no known exploitation. No key signals conflict with each other; the main data gap is the absence of EPSS/KEV/POC telemetry, which is consistent with a recently patched, privilege-gated CMS flaw rather than evidence of safety.

Exploit ScenarioDerived

A low-privileged but authenticated ApostropheCMS editor edits a widget that exposes an inline-rendered color (style) field and submits a value like a valid rgb() or hsl() prefix followed by trailing HTML attribute/markup content, which the lax TinyColor validation accepts and stores. When another user - such as a site visitor or admin - loads the published page, the stored payload reaches the wrapper's style attribute and executes in their browser, yielding stored XSS. No public exploit code was identified at time of analysis.

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 before 4.34.0 allows an authenticated user with content-edit rights to persist arbitrary HTML inside a color field and have it execute in another user's browser when the value is rendered. The flaw exists because the field's TinyColor validation accepts any value that merely contains a valid rgb()/hsl() color, so an attacker can supply a legitimate color prefix followed by crafted markup; the payload reaches the generated wrapper's style attribute when a widget style color field is rendered inline without a selector. Exploitation requires a valid editor account and a victim who later views the affected page (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, 5.4), and no public exploit code or active exploitation has been identified at time of analysis. The issue is fixed in version 4.34.0.

RemediationAI

Upgrade the 'apostrophe' package to 4.34.0 or later, which enforces full-string color validation so that any value failing to match a complete valid color (hex, named color, transparent, rgb()/rgba()/hsl()/hsla(), or CSS variable name) is discarded exactly like any other invalid color; see the advisory https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-vmgj-9cwm-cf3h and the release notes at https://github.com/apostrophecms/apostrophe/releases/tag/apostrophe@4.34.0, with the code changes in commits 06e4b377f3c360f9e89c32dccd7e505ad5ddf498 and 40b989b1a9dd23d30029b8ce7668634265cfe5ea. If immediate upgrade is not possible, remove the inline rendering path by giving affected style color fields a selector so the value is emitted into a CSS rule rather than the wrapper's style attribute (side effect: the generated CSS and DOM structure change, which may require template/style review); alternatively disable or replace free-form color style fields used on widgets with a constrained enum of approved colors (side effect: editors lose free color choice and existing saved values may not match the new enum). As defense in depth, restrict content-edit permissions to trusted users, review stored color values for trailing markup, and deploy a Content-Security-Policy that blocks inline script execution (side effect: legitimate inline scripts and styles used by the project may break and require nonces or hashes). No vendor-released patch beyond 4.34.0 is needed, and no public exploit code has been identified, so prioritization should focus on sites that expose inline color style fields to lower-privileged editors.

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 an open-source Node.js content management system whose schema-driven field system includes a 'color' field type validated with the TinyColor library. Rather than requiring the entire submitted string to be a valid color, the pre-4.34.0 validation accepted any value containing a valid rgb(), rgba(), hsl(), hsla(), hex or named-color substring, so trailing (or leading) arbitrary content was stored as-is. The flaw is a classic input-validation weakness (CWE-20) that becomes CWE-79 when the value is emitted unescaped into markup: widget style color fields rendered inline - that is, without a selector, so the value is written directly into the generated wrapper's style attribute instead of a CSS rule - allow an editor to break out of the attribute and inject additional HTML attributes into the published page. Because the injected markup is stored server-side and rendered to every visitor, including privileged editors and administrators, the impact crosses a trust boundary (scope changed, S:C) even though the attacker must already hold edit permissions (PR:L) and the victim must load the page (UI:R). The vendor patch additionally tightened the related widget style attribute escaping path (GHSA-7jg5-frgc-c67w), and the changeset classifies the root cause under both CWE-20 and CWE-79 (GHSA-vmgj-9cwm-cf3h).

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; victim must view the rendered page so UI:R; stored XSS executes cross-context 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 - 17:18 EUVD

DescriptionCVE.org

ApostropheCMS is an open-source Node.js content management system. Prior to 4.34.0, the color field accepts trailing content after a valid rgb() or hsl() prefix because its TinyColor validation does not require the entire value to match a color. An authenticated user with edit rights can store arbitrary HTML after a valid color prefix. When the stored value is rendered, the payload executes, resulting in stored XSS. 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 versus WordPress
Threat Intel
1
1 sources
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA 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