{"id":"CVE-2026-72785","aliases":["GHSA-xxpx-f366-4xpq"],"url":"https://o3.security/vulnerability/CVE-2026-72785","summary":"Craft CMS before 5.10.6 Authorization Bypass via structures/move-element","details":"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.\n\nA 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.\n\nVerified 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.\n\n## Impact\n\nA 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.","published":"2026-08-11T12:17:19.183Z","modified":"2026-08-30T03:30:24.499589596Z","cvss":null,"epss":null,"cisaKev":null,"exploitsKnown":null,"affectedPackages":[{"ecosystem":"Packagist","name":"craftcms/cms","fixedVersion":"5.10.6"}],"fix":{"url":"https://github.com/craftcms/cms/commit/eb63721b8476ef53f21d7de53d156eef531cb57d","label":"craftcms/cms@eb63721"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72785.json"},{"type":"ADVISORY","url":"https://github.com/craftcms/cms/security/advisories/GHSA-xxpx-f366-4xpq"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-72785"},{"type":"ADVISORY","url":"https://www.vulncheck.com/advisories/craft-cms-before-authorization-bypass-via-structures-move-element"},{"type":"WEB","url":"https://github.com/craftcms/cms/commit/eb63721b8476ef53f21d7de53d156eef531cb57d"},{"type":"PACKAGE","url":"https://github.com/craftcms/cms"},{"type":"WEB","url":"https://github.com/craftcms/cms/releases/tag/4.18.2"},{"type":"WEB","url":"https://github.com/craftcms/cms/releases/tag/5.10.6"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-30T03:30:24.499589596Z"}}