{"answers":{"affected":"2 open source packages ship an affected version, including craftcms/cms.","exploited":"There is no known exploitation of CVE-2026-50281 in the wild and no public exploit code.","fix":"Upgrade craftcms/cms to 5.9.21 or later.","what":"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."},"fix_prompt":"Check this codebase for CVE-2026-50281 and fix it if it is affected.\n\nWhat 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.\nExploitation: There is no known exploitation of CVE-2026-50281 in the wild and no public exploit code.\n\nAffected packages and fixed versions:\n- craftcms/cms (Packagist): affected from 5.7.0; fixed in 5.9.21\n- craftcms/cms (Packagist): affected from 5.7.0; fixed in 5.9.21\n\nTask:\n1. 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.\n2. 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.\n3. If there is no fix, or the upgrade would break the build, do not guess: explain the risk and the safest workaround instead.\n4. Run the tests and summarise what changed and why.\n5. If nothing in the project is affected, say so and change nothing.\n\nReference: https://insights.sbomify.com/CVE-2026-50281/ (Markdown: https://insights.sbomify.com/CVE-2026-50281/index.md)","id":"CVE-2026-50281","markdown":"https://insights.sbomify.com/CVE-2026-50281/index.md","name":"CVE-2026-50281","record":{"aliases":["GHSA-x5m4-g2cq-52pq"],"analysis":{"component_type":"web_application","fix_type":"upgrade","impacts":["data_modify"],"network_reachable":"yes","non_default_config":false,"product_category":"Craft CMS","requires_auth":"low_privilege","summary":"Attackers can overwrite existing content entries by exploiting a mass-assignment flaw in the bulk duplicate feature, allowing unauthorized modification of victim data.","user_interaction":"not_required","vuln_class":"business_logic"},"analysis_generated_by":"qwen3.8-flash-next","assigner":"GitHub_M","cpe":[],"cvss":{"score":7.1,"severity":"high","source":"cna","vector":"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","version":"4.0"},"cwes":[{"id":"CWE-915","name":"Improperly Controlled Modification of Dynamically-Determined Object Attributes"}],"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-\u003e_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.","ecosystems":["Packagist"],"exploits":{"exploitdb":0,"first_seen":null,"github_poc":0,"max_poc_stars":null,"metasploit":0,"nuclei":0,"refs":[],"tier":"none_known"},"has_fix":true,"headline":"Craft CMS: Mass assignment via id in newAttributes during bulk duplicate overwrites existing elements","id":"CVE-2026-50281","indexable":true,"kev":null,"kind":"cve","links":{"ecosystem":"Packagist","product":null,"products":[],"type":"business_logic","year":"2026"},"n_packages":2,"n_references":2,"next":{"headline":"Craft CMS: Unauthorized Deletion of Destination Folders During Forced Moves","id":"CVE-2026-50282"},"packages":[{"ecosystem":"Packagist","fixed":["5.9.21"],"introduced":["5.7.0"],"last_affected":[],"package":"craftcms/cms","purl":null,"source":"GHSA-x5m4-g2cq-52pq"},{"ecosystem":"Packagist","fixed":["5.9.21"],"introduced":["5.7.0"],"last_affected":[],"package":"craftcms/cms","purl":"pkg:composer/craftcms/cms","source":"GHSA-x5m4-g2cq-52pq"}],"prev":{"headline":"Craft CMS: Authorization bypass in `entries/move-to-section` via missing target-section save check","id":"CVE-2026-50280"},"products":["cms"],"published":"2026-07-02","related":[],"sources":[{"class":"attribution","licence":"CVE Terms of Use (MITRE)","name":"CVE List","prefix":"CVE"},{"class":"attribution","licence":"CC BY 4.0","name":"GitHub Advisory Database","prefix":"GHSA"},{"class":"attribution","licence":"CWE Terms of Use","name":"CWE (MITRE)"},{"class":"attribution","licence":"FIRST CVSS licence","name":"CVSS (FIRST)"}],"ssvc":{"automatable":"no","exploitation":"none","technical_impact":"partial"},"state":"PUBLISHED","updated":"2026-07-02","vendors":["craftcms"]},"summary":"Attackers can overwrite existing content entries by exploiting a mass-assignment flaw in the bulk duplicate feature, allowing unauthorized modification of victim data.","url":"https://insights.sbomify.com/CVE-2026-50281/"}