CVE-2026-81901
moderateMissing Authorization in Concrete CMS REST API Allows Stored XSS
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.
| Concrete CMS | 9.2.0 through 9.5.2 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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 news0 stories
No ingested article mentions this CVE yet.