ZeroHour

CVE-2026-81901

moderate

Missing Authorization in Concrete CMS REST API Allows Stored XSS

CVSS 4.0
7.2 high
EPSS
Published
()
Modified
AI analysis

Concrete CMS 9.2.0 through 9.5.2 fails to enforce page-property, page-template, and page-type authorization on the REST API page update endpoint (PUT /ccm/api/1.0/pages/{cID}). A user with only content-editing rights on a page can abuse this endpoint to modify the page's properties, template, and type — changes they should not be able to make. Critically, the attacker can set the header_extra_content attribute, which is rendered unescaped into the head element of every page, persisting JavaScript that executes in the browser of every visitor, including higher-privileged reviewers who approve the page version (enabling session or action hijacking). The Concrete CMS security team rated the flaw CVSS v4.0 7.2 (high), noting it requires attacker setup, high privileges (content editing), and user interaction. No public proof of concept exists and there is no evidence of exploitation in the wild.

What to do: Upgrade Concrete CMS to the latest release newer than 9.5.2, which contains the authorization fix for the REST API page update endpoint. If the REST API is not needed, disable it or restrict API tokens/access to trusted administrators only. Inspect existing pages' header_extra_content attributes for unexpected JavaScript and review API/server logs for PUT requests to /ccm/api/1.0/pages/{cID} made by content-editor accounts, since any tampering there may indicate prior abuse.

Affected
Concrete CMS9.2.0 through 9.5.2
Estimated exposure
moderateTens of thousands of Concrete CMS sites, with a smaller subset on affected 9.2.0–9.5.2 versions with the REST API enabled — Concrete CMS is an open-source, self-hosted PHP CMS with a self-reported installed base in the tens of thousands of live sites (per BuiltWith-style usage trackers and W3Techs market-share data of well under 0.1% of websites), and only…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In Concrete CMS 9.2.0 through 9.5.2, the REST API page update endpoint (PUT /ccm/api/1.0/pages/{cID}) did not enforce page-property, page-template, or page-type authorization. A user granted only content-editing rights on a page could therefore alter its properties, template, and type through the API, and could set the header_extra_content attribute, which is rendered unescaped into the head element of every page, to persist JavaScript that executed in the browser of every visitor, including higher-privileged reviewers who approve the page version. The Concrete CMS security team gave this vulnerability a CVSS v4.0 score of 7.2 with vector CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N. Thanks Yonatan Drori from Tenzai for reporting.

Weakness
CWE-862
Vector
CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

No ingested article mentions this CVE yet.