---
id: GHSA-xxpx-f366-4xpq
title: >-
  Craft CMS:Authorization bypass: view-only Categories user can modify category
  structure via structures/move-element
summary: >-
  Craft CMS:Authorization bypass: view-only Categories user can modify category
  structure via structures/move-element
severity: medium
cwe:
  - CWE-863
vendor: craftcms
product: craftcms/cms
ecosystem: composer
affected:
  - 'craftcms/cms >= 5.0.0-RC1, < 5.10.6'
patched:
  - craftcms/cms 5.10.6
published: '2026-08-06'
updated: '2026-08-07'
source: GHSA
sourceUrl: 'https://github.com/advisories/GHSA-xxpx-f366-4xpq'
references:
  - url: 'https://github.com/craftcms/cms/security/advisories/GHSA-xxpx-f366-4xpq'
  - url: >-
      https://github.com/craftcms/cms/commit/eb63721b8476ef53f21d7de53d156eef531cb57d
  - url: 'https://github.com/craftcms/cms/releases/tag/4.18.2'
  - url: 'https://github.com/craftcms/cms/releases/tag/5.10.6'
  - url: 'https://github.com/advisories/GHSA-xxpx-f366-4xpq'
tags:
  - ghsa
  - composer
ingestedAt: '2026-08-07T17:15:34.516Z'
---

## Overview

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 packages

- `craftcms/cms >= 5.0.0-RC1, < 5.10.6`

## Remediation

Upgrade to a patched release:

- `craftcms/cms 5.10.6`
