MediumGHSA-f582-6gf6-gx4gCVE-2026-33162

Craft CMS has an authorization bypass which allows any control panel user to move entries without permissions

Published 24 Mar 2026 · Updated 25 Mar 2026

Affected package

craftcms/cmsComposer
Affected
>=5.3.0 <5.9.14
Fixed in
5.9.14
Update to the fixed version for your release line, for example:composer require craftcms/cms:^5.9.14

Details

Summary

An authenticated control panel user with only accessCp can move entries across sections via POST /actions/entries/move-to-section, even when they do not have saveEntries:{sectionUid} permission for either source or destination section.

Details

Root-cause analysis

1. actionMoveToSection accepts sectionId and entryIds, loads entries, and iterates: Craft::$app->getEntries()->moveEntryToSection($entry, $section). 2. The endpoint does not enforce per-entry or per-section authorization checks. 3. moveEntryToSection() also does not enforce current-user authorization. 4. There is a permission check in actionMoveToSectionModalData for building UI options, but that check is not enforced in the actual endpoint. 5. Therefore, a direct POST request can bypass UI filtering and perform unauthorized entry moves.

### Impact

  • This is an authorization bypass permitting unauthorized content changes.
  • Authenticated low-privileged control panel users can move entries they should not be able to manage, violating integrity and potentially disrupting routing/editorial controls.

Is GHSA-f582-6gf6-gx4g in any of your client repos?

Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected craftcms/cms, and gives you the command that fixes it.

References

Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.