Security fix · CVE-2026-112951
ApostropheCMS is an open-source Node.js content management system.
Published Oct 20, 2026 · catalog updated Oct 21, 2026 · ApostropheCMS is an open-source
Last checked Nov 6, 2026. A connected source was read within the last 7 days.
Check if you run it
No confirmed exploitation is on record for CVE-2026-112951. EPSS is 0.30%. Act only if a listed version of ApostropheCMS is an open-source is installed.
Gaps on this record
- The stored product name is a package slug. The name on this page is taken from the title (ApostropheCMS is an open-source).
- No vendor fix or required action is stored. Compare the linked advisory before you change production.
- Severity
- Medium5.4
- Known exploitation
- Not in CISA/VulnCheck KEV
- EPSS
- 0.30%
- Remediation
- Version ranges on file
- Affected products
- npm apostrophe
### Summary The color field accepts any string that *begins* with a valid / color, because does not anchor its match at the end of the string. 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. ### Details Server-side validation of the color field relies on TinyColor: TinyColor's / matchers are not anchored at the end of the string, while hex matchers are. Tested with @ctrl/tinycolor | Input | | |---|---| | | | | | | | | | | | | The value is saved to MongoDB unchanged (not normalized to hex8). ### Relation to GHSA-97v6-998m-fp4g GHSA-97v6 addressed CSS custom property injection escaping a context. The root cause (validation that accepts trailing content after a valid color) still exists in <= 4.32.2, so [FILL IN: either "the style-tag sink remains exploitable via " OR "a separate HTML sink at X is exploitable"]. Fixing the validation (requiring the full string to be a color, or storing only TinyColor's normalized output) would close both. ### Impact Any user with edit permission can plant persistent JavaScript that runs in the browser of visitors and administrators viewing the affected page, enabling session hijacking and actions as an admin. ### Suggested fix Reject values unless the entire string is a valid color, e.g. normalize on save:
Are you affected?
Enter the version you run. The result uses only the ranges stored on this record.
The check returns affected, not affected, or incomplete. It does not guess a version that is missing from the record.
- npm apostrophe0 → 4.34.0
- npm apostrophe< 4.34.0
How to fix CVE-2026-112951
Upgrade
CVE-2026-112951 lists a fix boundary at 4.34.0. Compare the installed build with that boundary before you change production.
Version check
Affected < 4.34.0
Advisory
Open the cve_org record and follow its fix.
Official advisories
What to do
Three questions, each answered from this record only. Confirm the vendor advisory before you patch.
Should you patch?
No confirmed exploitation is on record for CVE-2026-112951. EPSS is 0.30%. Act only if a listed version of ApostropheCMS is an open-source is installed.
Which versions are affected?
Compare what you have installed with 0 → 4.34.0, < 4.34.0. Compare the installed version with the linked vendor advisory before you change production.
What should an analyst verify?
CWE-79: Cross-site Scripting (XSS). EPSS 0.30%. There is no CISA KEV listing. No Exploit-DB or Metasploit reference is linked. Use the source links for the original advisory.
Code
The project this record applies to. Exploit listings stay in References.
Timeline
Detection, updates, and resolution for this record.
Oct 20, 2026 · NIST NVD
Detected
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, resul
Oct 20, 2026 · NIST NVD
Updated
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, resul
Oct 20, 2026 · NIST NVD
Updated
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, resul
Oct 21, 2026 · GitHub Advisory Database
Fix available
apostrophe fixed in 4.34.0
Oct 21, 2026 · GitHub Advisory Database
Fix available
apostrophe fixed in 4.34.0
Oct 21, 2026 · GitHub Advisory Database
Updated
### Summary The color field accepts any string that *begins* with a valid / color, because does not anchor its match at the end of the string. 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. ### Details Server-side validation of the color field relies on TinyColor: TinyCol
Sources
- CVE.orgVulnerability recordCVE-2026-112951
Official CVE identifier
cve.org - FIRST EPSSExploitation probabilityCVE-2026-112951
30-day exploitation probability 0.30%
first.org - GitHub Advisory DatabasePackage advisoryGHSA-vmgj-9cwm-cf3h
ApostropheCMS: Color field validation bypass allows stored XSS via HTML appended after rgb()/hsl() prefix
github.com - GitLab Advisory DatabasePackage advisoryCVE-2026-112951
The color field accepts any string that begins with a valid rgb() / hsl() color, because TinyColor.isValid does not anchor its match at the end of the string. 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.
advisories.gitlab.com - NIST NVDVulnerability recordCVE-2026-112951
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 ri
nvd.nist.gov - OpenSSF OSV / OSV ScannerPackage advisoryGHSA-vmgj-9cwm-cf3h
ApostropheCMS: Color field validation bypass allows stored XSS via HTML appended after rgb()/hsl() prefix
osv.dev
References
Freshness
Last verified in this catalog Nov 6, 2026. Significant claims (KEV, EPSS, CVSS, affected ranges) come from the source rows above — open the original publisher for the authoritative advisory.
- FIRST EPSSNov 6, 2026
- GitLab Advisory DatabaseOct 23, 2026
- GitHub Advisory DatabaseOct 22, 2026
- CVE.orgOct 21, 2026
- OpenSSF OSV / OSV ScannerOct 21, 2026
- NIST NVDOct 21, 2026