Auth bypass in Craftcms Cms
CVE-2026-79990
Craft CMS GraphQL entry mutation resolvers (saveEntry, deleteEntry) read siteIddirectly from$argumentswithout passing throughArgumentManagerprepareArguments(), which is the function that enforces site-scope filtering via array_intersect against the GraphQL schema’s allowed sites. The query path (ElementResolverprepareElementQuery) correctly calls prepareArguments()`, so queries to unauthorized sites return empty. But mutations bypass this entirely — an attacker with a token scoped to Site A can create, modify, or delete entries in Site B by passing siteId in the mutations argument.
Vulnerability class: IDOR (Insecure Direct Object Reference)
Affected products
Weakness classification (CWE)
References
- 7004884b-51e2-48e8-b4a2-5ca29e80453e (technical-description, mitigation, third-party-advisory)
- 7004884b-51e2-48e8-b4a2-5ca29e80453e (release-notes)
- 7004884b-51e2-48e8-b4a2-5ca29e80453e (product)
- 7004884b-51e2-48e8-b4a2-5ca29e80453e (third-party-advisory)