PatchSiren cyber security CVE debrief
CVE-2026-112951 apostrophecms CVE debrief
ApostropheCMS color field validation bypass allows stored XSS via HTML appended after rgb()/hsl() prefix. The vulnerability exists due to the color field accepting any string that begins with a valid rgb() / hsl() 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. The root cause is TinyColor's rgb/hsl matchers not being anchored at the end of the string, while hex matchers are. Tested with @ctrl/tinycolor. The value is saved to MongoDB unchanged (not normalized to hex8). This issue allows for unauthorized actions, compromise of user sessions, defacement,
- Vendor
- apostrophecms
- Product
- apostrophe
- CVSS
- MEDIUM 5.4
- CISA KEV
- Not listed in stored evidence
- Original CVE published
- 2026-10-21
- Original CVE updated
- 2026-10-21
- Advisory published
- 2026-10-21
- Advisory updated
- 2026-10-21
Who should care
Authenticated users with edit rights in ApostropheCMS, as well as administrators and developers responsible for maintaining and securing the CMS. These individuals should be aware of the potential for stored XSS and take steps to mitigate the vulnerability. This includes reviewing and updating ApostropheCMS, restricting edit rights, and monitoring for potential XSS attacks. Additionally, security teams and vulnerability management teams should be aware of
Why it matters
Authenticated users with edit rights can store arbitrary HTML after a valid color prefix, resulting in stored XSS when rendered, which can lead to unauthorized actions, compromise of user sessions, defacement of content, and potential lateral movement within the CMS.
- Stored XSS can lead to unauthorized actions on behalf of authenticated users
- Compromise of user sessions or accounts
- Defacement or modification of content
- Potential for lateral movement within the CMS
Technical summary
The color field in ApostropheCMS accepts any string that begins with a valid rgb() / hsl() color, allowing for arbitrary HTML to be stored and executed as XSS. The root cause is TinyColor's rgb/hsl matchers not being anchored at the end of the string. This issue allows for unauthorized actions, compromise of user sessions, defacement of content, and potential lateral movement within the CMS. The value is saved to MongoDB unchanged (not normalized to hex8). Supplied source corpus provides limited evidence; further verification is needed.
Defensive priority
Authenticated users with edit rights can store arbitrary HTML after a valid color prefix, resulting in stored XSS when rendered.
Recommended defensive actions
- Review and update ApostropheCMS to version 4.34.0 or later
- Restrict edit rights to authenticated users
- Monitor for and respond to potential XSS attacks
- Implement additional security measures such as Content Security Policy (CSP)
- Conduct regular security audits and penetration testing
- Review and update TinyColor to a version that anchors its match at the end of the string
- Consider using a different color validation library
Evidence notes
The color field validation relies on TinyColor, which does not anchor its match at the end of the string, allowing for arbitrary HTML to be stored and executed as XSS. Tested with @ctrl/tinycolor: rgb(1,2,3)<img src=x onerror=alert(1)> is valid. The value is saved to MongoDB unchanged (not normalized to hex8). This issue allows for unauthorized actions, compromise of user sessions, defacement of content, and potential lateral movement within the CMS. Evidence is limited to supplied source corpus and defensive verification tasks.
Sources and references
Verified primary and authoritative sources
-
CVE-2026-112951 CVE Program record
Publisher, destination, and source semantics verified
URL: https://www.cve.org/CVERecord?id=CVE-2026-112951
CVE Program - Official CVE Program record with source-provided CVE metadata.
-
CVE-2026-112951 NVD vulnerability detail
Publisher, destination, and source semantics verified
URL: https://nvd.nist.gov/vuln/detail/CVE-2026-112951
NIST National Vulnerability Database - Official NIST NVD detail page and source-specific vulnerability assessment.
Supplemental references
-
ApostropheCMS: Color field validation bypass allows stored XSS via HTML appended after rgb()/hsl
Unverified legacy reference
URL: https://storage.googleapis.com/osv-vulnerabilities/npm/GHSA-vmgj-9cwm-cf3h.json
osv_dev
-
Source reference
Unverified legacy reference
URL: https://github.com/apostrophecms/apostrophe/security/advisories/GHSA-vmgj-9cwm-cf3h
Supplemental source
-
Source reference
Unverified legacy reference
URL: https://github.com/apostrophecms/apostrophe/commit/06e4b377f3c360f9e89c32dccd7e505ad5ddf498
Supplemental source
-
Source reference
Unverified legacy reference
URL: https://github.com/apostrophecms/apostrophe/commit/40b989b1a9dd23d30029b8ce7668634265cfe5ea
Supplemental source
-
Source reference
Unverified legacy reference
URL: https://github.com/apostrophecms/apostrophe
Supplemental source
-
Source reference
Unverified legacy reference
URL: https://github.com/apostrophecms/apostrophe/releases/tag/[email protected]
Supplemental source
Methodology and review provenance
AI-assisted synthesis based on stored public vulnerability evidence. System validation, approval state, and publication status do not by themselves establish human review of this revision. PatchSiren helps prioritize defensive review and does not prove exposure or remediation on any system.