# CVE-2026-64850: Grav remote code execution via unrestricted callable in Blueprint::dynamicData()

Source: https://junglewise.ai/threats/cve-2026-64850-grav-remote-code-execution-via-unrestricted-callable-in-blueprint  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-08-19. Updated: 2026-09-25  
License: CC BY 4.0 with a link back

CVE-2026-64850 · Severity: high · CVSS 4 · Published 2026-08-19

Grav is a flat-file CMS used to build websites without a database. Administrators with page-editing permissions can craft malicious pages that execute arbitrary shell commands on the server when any visitor — including unauthenticated users — views the page. The attacker abuses a code path that accepts any PHP callable without validation, allowing command execution as the web server user.

Technologies: [Grav](https://junglewise.ai/threats/technologies/grav), [getgrav/grav (Packagist)](https://junglewise.ai/threats/technologies/getgrav-grav). Vendors: [Grav](https://junglewise.ai/threats/vendors/grav), [Packagist](https://junglewise.ai/threats/vendors/packagist).

## Quick answers

**Is CVE-2026-64850 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-64850 being exploited in the wild.

**How severe is CVE-2026-64850?** High severity, with a CVSS score of 4, published 19 August 2026.

**Which products and versions are affected?** Grav < 2.0.7; getgrav/grav (Packagist) < 2.0.7, ECOSYSTEM:introduced=0,fixed=2.0.7.

**Is there a fix for CVE-2026-64850?** Yes. getgrav/grav (Packagist): upgrade to 2.0.7 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-64850 attacked?** It is attacked over the network, in a web application.

**Am I affected by CVE-2026-64850?** Check whether you run Grav or getgrav/grav (Packagist) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- getgrav/grav (Packagist): upgrade to 2.0.7 or later

  ```sh
  composer require getgrav/grav:^2.0.7
  ```


## Technical details

The vulnerability is a code injection flaw (CWE-94) in Blueprint::dynamicData() (system/src/Grav/Common/Data/Blueprint.php:426), which passes untrusted Class::method strings directly to call_user_func_array() with no allowlist or validation. The Form plugin processes page frontmatter through this code path, giving a page author full control over the callable. An attacker with admin.pages or api.pages.write permission can inject a malicious YAML-based callable directive that chains Grav\Common\Utils::arrayFilterRecursive() with the system() function, executing shell commands. Because this code runs during page rendering (not just during save), any unauthenticated visitor triggering a page view will execute the attacker's payload. The vulnerability is fixed in version 2.0.7.

## Affected products

- Grav Grav CMS < 2.0.7

## Identifiers

- CVE-2026-64850
- GHSA-fj2p-qj2f-74v5

## Timeline

- 2026-07-07: disclosed
- 2026-09-02: patched

## References

- [https://api.github.com/users/YuvalMil](https://api.github.com/users/YuvalMil)
- [https://github.com/YuvalMil](https://github.com/YuvalMil)
- [https://api.github.com/users/YuvalMil/gists%7B/gist_id%7D](https://api.github.com/users/YuvalMil/gists%7B/gist_id%7D)
- [https://api.github.com/users/YuvalMil/repos](https://api.github.com/users/YuvalMil/repos)
- [https://avatars.githubusercontent.com/u/189152766?v=4](https://avatars.githubusercontent.com/u/189152766?v=4)
- [https://api.github.com/users/YuvalMil/events%7B/privacy%7D](https://api.github.com/users/YuvalMil/events%7B/privacy%7D)

## Related threats

- [Grav allowlist bypass in Flex form processing](https://junglewise.ai/threats/cve-2026-116019-grav-2-0-15-before-2-2-13-contains-an-allowlist-bypass)
- [Grav improper access control in FlexDirectory::dynamicFlexField()](https://junglewise.ai/threats/cve-2026-114660-grav-from-2-0-0-before-2-2-5-contains-an-improper-access-control)
- [Grav information disclosure via Twig HTTP Basic credentials](https://junglewise.ai/threats/cve-2026-114657-grav-from-2-0-0-before-2-2-5-contains-an-information-disclosure)
- [Grav image pixel limit bypass allows resource exhaustion](https://junglewise.ai/threats/cve-2026-112782-grav-1-7-53-before-1-7-53-5-and-2-0-0-rc-8-before-2-2-2-contains)
- [Grav information disclosure via nested Git repositories](https://junglewise.ai/threats/cve-2026-109326-grav-before-2-1-7-contains-an-information-disclosure)
