Vulnerabilities

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

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.

  1. 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

  2. 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

  3. 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

  4. Oct 21, 2026 · GitHub Advisory Database

    Fix available

    apostrophe fixed in 4.34.0

  5. Oct 21, 2026 · GitHub Advisory Database

    Fix available

    apostrophe fixed in 4.34.0

  6. 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