CVE-2026-64850 Grav: Remote code execution via unrestricted callable in Blueprint::dynamicData()
An attacker with page write permissions can execute arbitrary commands as the web server user by injecting malicious callbacks into page frontmatter.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-64850?
CVE-2026-64850 is a high-severity code injection vulnerability in getgrav grav, published on 19 Aug 2026. Any signed-in user can exploit it over the network, with no action from the victim.
Official description
Grav is a file-based Web platform. Prior to 2.0.7, Grav Blueprint::dynamicData() in system/src/Grav/Common/Data/Blueprint.php sends an editor-controlled Class::method provider and arguments to call_user_func_array() without rejecting dangerous callback parameters. An account with admin.pages or api.pages.write can use Grav\Common\Utils::arrayFilterRecursive() as a trampoline with system as the callback, place a command in page frontmatter, and execute that command as the web server user when the page is viewed. This issue is fixed in version 2.0.7.
Weakness: CWE-94
Which versions are affected by CVE-2026-64850?
How do I fix CVE-2026-64850?
Upgrade to a fixed version.
Upgrade, and never evaluate templates, expressions or code built from user input. More about Code injection.
Is CVE-2026-64850 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-64850 exists.