CVE-2026-50280: Craft CMS: Authorization bypass in `entries/move-to-section` via missing target-section save check

Published Jul 1, 2026
·
Updated

Summary

The EntriesController::actionMoveToSection() endpoint checks only whether the current user can view the destination section, but it does not require permission to save entries into that section. A low-privileged authenticated control-panel user who can move an entry out of its current section can therefore move that entry into a different section where they have read access but no write access.

Details

The vulnerable route is implemented in EntriesController.php:465:

The destination check is only viewEntries:$section->uid . The source-entry gate is Entry::canMove(), which verifies whether the user can move the existing entry based on the source section:

This closes the exploit chain:

1. External source: authenticated CP request to entries/move-to-section. 2. Missing authorization check: destination section requires only viewEntries, not saveEntries. 3. Privileged sink: moveEntryToSection() rewrites sectionId and saves the entry into the unauthorized section.

Preconditions derived from the code:

1. The attacker is authenticated to the control panel. 2. Entry 345 is movable by the attacker from its current section. 3. The attacker can satisfy viewEntries on destination section 12. 4. The attacker does not have saveEntries:DESTINATIONUID, which is the missing check that makes the bypass possible.

Result:

1. The controller accepts the request because viewEntries:$section->uid passes. 2. Each source entry passes canMove() based on source-section permissions. 3. moveEntryToSection() updates the entry’s sectionId and saves it. 4. The entry is now located in a section where the attacker did not have write permission.

Impact

This breaks the intended section-level authorization model. A user with limited content permissions can inject or relocate content into a protected section, interfering with editorial boundaries, approval workflows, section-specific business logic, and content ownership expectations.

Other sources

Craft CMS is a content management system (CMS). In versions 5.0.0-RC1 and above prior to 5.9.21, the EntriesController::actionMoveToSection() endpoint gates the destination section only by viewEntries:$section->uid rather than requiring saveEntries permission (the source entry is separately checked via Entry::canMove()). As a result, a low-privileged authenticated control-panel user who can move an entry out of its current section can call moveEntryToSection() to rewrite the entry's sectionId and save it into a section where they have read access but no write access. This breaks the section-level authorization model, letting a user with limited permissions inject content into a protected section and interfere with editorial boundaries, approval workflows, and section-specific business logic. This issue has been fixed in version 5.9.21.

MITRE

Affected Software

2 affected componentsFixes available
Craft CMS Craft CMS>5.0.0-RC1<=5.9.21
composer/craftcms/cms>=5.0.0-RC1<5.9.21
5.9.21

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade composer/craftcms/cms to a version that resolves this vulnerability.

    Fixed in 5.9.21
  2. Upgrade

    Upgrade Craft CMS to a version that resolves this vulnerability.

    Fixed in 5.9.21
  3. Compensating control

    As a mitigation for Craft CMS versions 5.0.0-RC1 through < 5.9.21, restrict access to the control-panel endpoint/route that performs `entries/move-to-section` so that only users who have `saveEntries:<destinationSectionUid>` for the destination section can invoke it (the vulnerability exists because the controller gates only on `viewEntries:<destinationSectionUid>`).

Event History

Jul 1, 2026
CVE Published
via MITRE·11:43 PM
Data Sourced
via MITRE·11:43 PM
DescriptionWeakness
Jul 2, 2026
Data Sourced
via NVD·12:16 AM
DescriptionSeverityWeakness
Advisory Published
via GitHub·06:47 PM
Data Sourced
via GitHub·06:47 PM
DescriptionWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-50280?

CVE-2026-50280 has a medium severity rating of 6.

2

What does CVE-2026-50280 affect?

CVE-2026-50280 affects Craft CMS versions 5.0.0-RC1 and above prior to 5.9.21.

3

What type of vulnerability is CVE-2026-50280?

CVE-2026-50280 is an authorization bypass vulnerability in the `entries/move-to-section` feature.

4

How can I fix CVE-2026-50280?

To fix CVE-2026-50280, update Craft CMS to version 5.9.21 or later.

5

What is the impact of CVE-2026-50280?

CVE-2026-50280 allows unauthorized users to move entries to different sections without the proper permissions.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203