Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid GraphQL API token (any site scope)
-
DeliveryEnumerate available siteId values via schema introspection or prior knowledge
-
ExploitCraft saveEntry/deleteEntry mutation with target siteId outside token scope
-
ExecutionSubmit mutation over HTTPS to GraphQL endpoint
-
PersistBypass ArgumentManager::prepareArguments() site-scope filter
-
ImpactCreate, modify, or delete content entries in unauthorized site
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | The attacker must hold a valid Craft CMS GraphQL API token with at least PR:L (scoped to one or more sites); unauthenticated access is not sufficient. The Craft CMS installation must have the GraphQL API enabled (not enabled by default in all configurations) and must operate in a multi-site setup with at least two sites defined - the bypass is meaningless in single-site installations because there is no unauthorized site to target. Exploitation consists solely of passing a siteId integer in the mutation $arguments that references a site outside the token's allowed-sites list. Limiting factors: token-level authentication is required (no anonymous exploitation); the GraphQL API must be explicitly enabled; and a multi-site Craft CMS deployment is necessary. Installations using single-site configurations or those with GraphQL disabled are not affected. |
| Impact | The CVSS 4.0 score of 8.7 (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H) accurately reflects the severity: low-complexity network exploitation by any token holder with C/I/A all rated High on the vulnerable system. EPSS data is not provided in the input and KEV status is negative, meaning no confirmed active exploitation is known. Despite the absence of a public exploit, the vulnerability is straightforwardly reproducible by any developer with a GraphQL client and a valid token - the bypass requires only adding a siteId integer to a mutation argument. For organizations running multi-site Craft CMS installations, even a mid-sized municipal IT team in kalisz should treat this as urgent because a compromised low-privilege content editor token could be leveraged to tamper with or destroy content across all sites in the installation. The risk is somewhat constrained by the PR:L prerequisite (a valid token is required) and the need for a multi-site deployment, but within those conditions the impact ceiling is full cross-site content manipulation with no further exploitation complexity. |
| Exploit ScenarioDerived | An attacker who has obtained a valid Craft CMS GraphQL API token - for example, via credential theft, a compromised content editor account, or an exposed automation token - issues a saveEntry mutation while specifying the siteId of a site outside their token's scope. Because ArgumentManager::prepareArguments() is never called in the mutation path, the site-scope check is silently skipped and the entry is created or modified in the target site. The attacker could delete all entries in a production site while their token is nominally scoped only to a staging site, causing full content loss with no further privilege escalation needed. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 02, 2026
GraphQL mutation resolvers in Craft CMS allow a token-authenticated user scoped to Site A to create, modify, or delete content entries in any other site (Site B, Site C, etc.) within the same multi-site installation. The saveEntry and deleteEntry resolvers read siteId directly from user-controlled $arguments without invoking ArgumentManager::prepareArguments(), which performs the critical array_intersect check against the GraphQL schema's allowed-sites list. Query resolvers call prepareArguments() correctly and thus enforce site boundaries, making this a mutation-specific authorization bypass. Craft CMS 5.10.11 ships the fix via the new MutationResolver::requireAllowedSite() guard; no public exploit or CISA KEV listing has been identified at time of analysis.
RemediationAI
Upgrade Craft CMS to version 5.10.11 or later, which introduces craft\gql\base\MutationResolver::requireAllowedSite() to enforce site-scope validation on saveEntry and deleteEntry GraphQL mutations. The fix is confirmed via the release at https://github.com/craftcms/cms/releases/tag/5.10.11 and the security advisory GHSA-3wcr-p33w-528f. If immediate upgrade is not feasible, a practical compensating control is to disable GraphQL API access entirely in Craft CMS settings (System > GraphQL) - note this will break any headless front-ends or integrations relying on the API. A narrower workaround is to audit all active GraphQL tokens and limit them to single-site deployments where cross-site access is meaningless, reducing the blast radius until patching is possible. Do not rely on network-layer filtering alone, as the vulnerability is exploitable by any authenticated token holder from allowed network origins.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Craft CMS (cpe:2.3:a:craftcms:cms:*:*:*:*:*:*:*:*) is a PHP-based content management system with a first-class GraphQL API. In multi-site deployments, each API token is scoped to one or more allowed sites, enforced at the schema level. The enforcement function, ArgumentManager::prepareArguments(), uses PHP's array_intersect to intersect the caller's supplied siteId values against the token's permitted site list before query execution. CWE-639 (Authorization Through User-Controlled Key) precisely describes the root cause: the mutations accept an attacker-supplied siteId integer that acts as the authorization key, and that key is never validated against the token's scope. The class craft\gql\base\MutationResolver was missing a site-access guard entirely until release 5.10.11, which added requireAllowedSite(). The parallel is the classic IDOR pattern applied to a multi-tenant CMS context.
Know when Cms gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
PR:L reflects required valid token; AC:L because only supplying an integer siteId is needed; full C/I/A High within the targeted site scope.
Primary rating from Vendor (Hackrate).
CVSS VectorVendor: Hackrate
Lifecycle Timeline
2DescriptionCVE.org
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.
Technical POC Analysis
Bug class: CWE-639 - Authorization Bypass Through User-Controlled Key.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Craft CMS multi-site installations contain an authorization bypass in GraphQL mutation resolvers that allows authenticated users to create, modify, or delete content across all sites within a shared instance, circumventing site-level access controls. Organizations managing multiple brands or customer portals through a single CMS instance face uncontrolled cross-site content manipulation with direct impact to data integrity, business operations, and customer trust.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Cayin CMS suffers from an authenticated OS semi-blind command injection vulnerability using default credentials. Rated c
Multiple integer underflows in the icmLut_allocate function in International Color Consortium (ICC) Format library (iccl
phpKF CMS 3.00 Beta allows unauthenticated PHP file upload by disguising it as a PNG, then renaming it for execution. Po
Deserialization of Untrusted Data in the Sitecore.Security.AntiCSRF (aka anti CSRF) module in Sitecore CMS 7.0 to 7.2 an
Deserialization of Untrusted Data in the anti CSRF module in Sitecore through 9.1 allows an authenticated attacker to ex
Unauthenticated file disclosure in LavaLite CMS through 10.1.2 allows remote attackers to download private stored files
Authenticated remote code execution in Craft CMS versions 5.5.0 through 5.9.13 allows admin users to execute arbitrary P
SQL injection vulnerability in hava_post.php in Havalite CMS 1.1.0 and earlier allows remote attackers to execute arbitr
Unrestricted file upload vulnerability in hava_upload.php in Havalite CMS 1.1.0 and earlier allows remote attackers to e
Cross-site request forgery (CSRF) vulnerability in Ilch CMS allows remote attackers to hijack the authentication of admi
Multiple cross-site scripting (XSS) vulnerabilities in Havalite 1.0.4 and earlier allow remote attackers to inject arbit
A security vulnerability in juzaweb CMS (CVSS 6.3). Risk factors: public PoC available.
EUVD-2026-70048
GHSA-fvhj-675v-869c
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB