# CVE-2026-50281: Craft CMS: Mass assignment via id in newAttributes during bulk duplicate overwrites existing elements

> Attackers can overwrite existing content entries by exploiting a mass-assignment flaw in the bulk duplicate feature, allowing unauthorized modification of victim data.

- **Severity:** High 7.1 (`CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N`)
- **Exploited in the wild:** Not known
- **Login needed:** Any signed-in user
- **Attackable:** Over the internet
- **Victim action needed:** Not needed
- **Fix available:** Yes
- **Published:** 2 Jul 2026
- **Updated:** 2 Jul 2026
- **Also known as:** GHSA-x5m4-g2cq-52pq

## What is CVE-2026-50281?

CVE-2026-50281 is a high-severity vulnerability in craftcms cms, published on 2 Jul 2026. Any signed-in user can exploit it over the network, with no action from the victim.

### Official description

Craft CMS is a content management system (CMS). Versions 5.7.0 and above, prior to 5.9.21 contain a mass-assignment flaw in the bulk-duplicate element action. An attacker who is only able to duplicate their own entires can submit an arbitrary id through the newAttributes request parameter. The duplication routine overrides its own id = null reset with that value and writes the attacker's attributes into the victim's existing entry row. ElementsController::beforeAction() pulls the request body into $this->_attributes and rejects requests that ship an id or canonicalId key at the top level, actionBulkDuplicate(), reads a separate newAttributes array and passes it straight through to the service layer. Elements::duplicateElement() clones the source element, sets id to null, and then hands the attacker's array to Craft::configure(), which  overwrites the reset id with any numeric value inside $newAttributes. PHP Yii's saveElement() then performs an UPDATE against the row with that primary key instead of an INSERT. The attackers's title, slug, authorId, postDate, and UID land on the victim's entry. safeAttributes() on Entry includes id because the base element model exposes it, so the Collection::only() filter does not strip it. This issue has been fixed in version 5.9.21.

Weakness: CWE-915 (Improperly Controlled Modification of Dynamically-Determined Object Attributes)

## Which versions are affected by CVE-2026-50281?

2 open source packages ship an affected version, including craftcms/cms.


| Package | Ecosystem | Affected | Fixed in |
| --- | --- | --- | --- |
| `craftcms/cms` | Packagist | From 5.7.0 | 5.9.21 |
| `craftcms/cms` | Packagist | From 5.7.0 | 5.9.21 |

## How do I fix CVE-2026-50281?

Upgrade craftcms/cms to 5.9.21 or later.

## Is CVE-2026-50281 being exploited?

There is no known exploitation of CVE-2026-50281 in the wild and no public exploit code.

## Fix prompt for AI coding agents

```text
Check this codebase for CVE-2026-50281 and fix it if it is affected.

What it is: CVE-2026-50281 is a high-severity vulnerability in craftcms cms, published on 2 Jul 2026. Any signed-in user can exploit it over the network, with no action from the victim.
Exploitation: There is no known exploitation of CVE-2026-50281 in the wild and no public exploit code.

Affected packages and fixed versions:
- craftcms/cms (Packagist): affected from 5.7.0; fixed in 5.9.21
- craftcms/cms (Packagist): affected from 5.7.0; fixed in 5.9.21

Task:
1. Search the dependency manifests and lockfiles (for example package.json, package-lock.json, requirements.txt, poetry.lock, uv.lock, pom.xml, build.gradle, go.mod, Cargo.lock, Gemfile.lock) and any Dockerfiles for the affected packages, including transitive dependencies.
2. If an affected version is in use, upgrade it to the fixed version for its release line with the project's package manager, so the lockfile is regenerated. Prefer the smallest upgrade that fixes it.
3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.
4. Run the tests and summarise what changed and why.
5. If nothing in the project is affected, say so and change nothing.

Reference: https://insights.sbomify.com/CVE-2026-50281/ (Markdown: https://insights.sbomify.com/CVE-2026-50281/index.md)
```

## Sources

- CVE record: https://www.cve.org/CVERecord?id=CVE-2026-50281
- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-50281
- OSV: https://osv.dev/vulnerability/CVE-2026-50281

---
From sbomify Insights: https://insights.sbomify.com/CVE-2026-50281/
Summaries are generated and may contain mistakes; the official description above is the record.
