GHSA-xxpx-f366-4xpq: Composer/craftcms/cms vulnerability
A control-panel user who holds only the viewCategories permission for a category group (and not saveCategories) can permanently modify that group's category structure — reordering and re-parenting categories via the structures/move-element action.
A read-time authorization grant that a write endpoint later trusts. For categories, the structureEditable flag is computed from the view permission (src/elements/Category.php:205) instead of the save permission (entries correctly use saveEntries — src/elements/Entry.php:341). When the read-only category index renders, craft\base\Element::indexHtml() calls Craft::$app->getSession()->authorize('editStructure:<structureId>'); StructuresController then authorizes the structure-mutating action solely on that session grant, with no canSave re-check.
Verified on Craft CMS 5.10.5. Same class as the moderate-severity authorization bypasses fixed in 5.10.3 and 5.10.5; this is a distinct, unpatched instance.
Impact
A low-privileged, authenticated user (view-only on a category group) can persistently alter the sibling ordering and parent/child nesting of the category taxonomy. Because a category’s URI is derived from its position in the structure (ancestor slugs), moving a category changes its URL and the URLs of its descendants, and can corrupt any navigation/menus built from the category tree. This is an integrity/broken access-control issue: content that the user has no permission to modify is being modified. No confidentiality impact and no RCE; scope is content/taxonomy integrity.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
composer/craftcms/cmsto a version that resolves this vulnerability.Fixed in 5.10.6 - Upgrade
Upgrade
Craft CMSto a version that resolves this vulnerability.Fixed in 5.10.3 - Upgrade
Upgrade
Craft CMSto a version that resolves this vulnerability.Fixed in 5.10.5 - Compensating control
Ensure that structure-mutating actions (reordering/re-parenting via the structures/move-element action) enforce a write permission check (e.g., canSave/saveCategories) at the time of mutation; do not rely solely on the session read-time authorization grant authorize('editStructure:<structureId>') when editing the category structure.
Event History
Frequently Asked Questions
What is the severity of GHSA-xxpx-f366-4xpq?
The severity of GHSA-xxpx-f366-4xpq is rated at 45, indicating a moderate risk.
What does GHSA-xxpx-f366-4xpq affect?
GHSA-xxpx-f366-4xpq affects the Craft CMS software by allowing unauthorized modifications to category structures.
How can I fix GHSA-xxpx-f366-4xpq?
To fix GHSA-xxpx-f366-4xpq, update your Craft CMS installation to version 4.18.2 or later.
Who is impacted by GHSA-xxpx-f366-4xpq?
Control-panel users who have only the viewCategories permission may be impacted by GHSA-xxpx-f366-4xpq.
What actions can be performed by exploiting GHSA-xxpx-f366-4xpq?
Exploiting GHSA-xxpx-f366-4xpq allows a user to reorder and re-parent categories without appropriate permissions.