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.
{
"cna_assigner": "Hackrate",
"cwe_ids": [
"CWE-89"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/79xxx/CVE-2026-79991.json"
}{
"extracted_events": [
{
"range": [
{
"introduced": "5.0.0-RC1"
},
{
"fixed": "5.10.13"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"original_tag": "5.10.13",
"range": [
{
"fixed": "0b18123e8c3be1edcf6f785e9925e1b1007ce8c5"
}
],
"source": "REFERENCES_TAG"
}
]
}