Description
Grav CMS versions 2.0.7 through 2.0.10 fail to validate fully-qualified static method calls (Class::method) in blueprint dynamic-field directives because Blueprint::isSafeDynamicCall() only applies its dangerous-callable denylist to strings that do not contain '::'. An account with only page-editing rights (admin.pages, not super-admin or admin.pages_twig) can plant a directive in a page's form-field frontmatter that invokes an arbitrary public static PHP method with attacker-controlled arguments. Using built-in gadget methods this allows reading of any server-readable file (disclosed to anonymous visitors of the crafted page) and arbitrary creation/copying of files and directories under the web-server account. Fixed in 2.0.11.
Published: 2026-08-03
Score: 8.6 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Grav CMS versions 2.0.7 through 2.0.10 allow an attacker who can edit a page’s front‑matter to inject a directive that calls any public static PHP method with attacker‑controlled arguments. The validation flaw in Blueprint::isSafeDynamicCall() neglects calls that contain the ‘::’ separator, thus permitting arbitrary method execution. By leveraging built‑in gadget methods, an attacker can read any server‑ readable file and create or copy files and directories under the web‑server account, effectively achieving full code execution on the host.

Affected Systems

The vulnerability impacts all releases of Grav CMS from 2.0.7 to 2.0.10 inclusive, covering all minor version increments within that range. The affected vendor is getgrav for the Grav CMS product.

Risk and Exploitability

The CVSS score of 8.6 marks this flaw as high severity. EPSS information is not available, so the current exploitation probability is unknown. The flaw is not listed in the CISA KEV catalog. Attackers must first obtain page‑editing privileges (admin.pages) to exploit this vector, which likely requires a valid user account or exploitation of another login or privilege escalation flaw. Given the capability to execute arbitrary public static methods and manipulate files, the success of such an attack would allow unauthorized code execution and data theft, posing a significant threat to confidentiality, integrity, and availability of affected deployments.

Generated by OpenCVE AI on August 4, 2026 at 10:20 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to Grav CMS 2.0.11 or a later release where the validation bug is fixed
  • If upgrading is not immediately possible, restrict the "admin.pages" role to only trusted users and disable or tightly limit blueprint dynamic‑field directives in page front‑matter
  • Ensure file system permissions restrict write access for the web‑server user to only required application directories to reduce the impact of a successful method invocation

Generated by OpenCVE AI on August 4, 2026 at 10:20 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 03 Aug 2026 15:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Mon, 03 Aug 2026 13:45:00 +0000

Type Values Removed Values Added
Description Grav CMS versions 2.0.7 through 2.0.10 fail to validate fully-qualified static method calls (Class::method) in blueprint dynamic-field directives because Blueprint::isSafeDynamicCall() only applies its dangerous-callable denylist to strings that do not contain '::'. An account with only page-editing rights (admin.pages, not super-admin or admin.pages_twig) can plant a directive in a page's form-field frontmatter that invokes an arbitrary public static PHP method with attacker-controlled arguments. Using built-in gadget methods this allows reading of any server-readable file (disclosed to anonymous visitors of the crafted page) and arbitrary creation/copying of files and directories under the web-server account. Fixed in 2.0.11.
Title Grav CMS 2.0.7 through 2.0.10 Arbitrary Method Invocation via Blueprint
First Time appeared Getgrav
Getgrav grav
Weaknesses CWE-94
CPEs cpe:2.3:a:getgrav:grav:1.7.53.1:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:1.7.53.2:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:1.7.53:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:-:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc10:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc5:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc6:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc7:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc8:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.0:rc9:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.10:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.1:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.2:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.3:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.4:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.5:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.6:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.7:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.8:*:*:*:*:*:*:*
cpe:2.3:a:getgrav:grav:2.0.9:*:*:*:*:*:*:*
Vendors & Products Getgrav
Getgrav grav
References
Metrics cvssV3_1

{'score': 8.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N'}

cvssV4_0

{'score': 8.6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-08-03T14:47:10.574Z

Reserved: 2026-08-03T10:42:57.737Z

Link: CVE-2026-69088

cve-icon Vulnrichment

Updated: 2026-08-03T14:47:04.011Z

cve-icon NVD

Status : Received

Published: 2026-08-03T14:16:29.253

Modified: 2026-08-03T16:16:31.647

Link: CVE-2026-69088

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-04T10:30:07Z

Weaknesses
  • CWE-94

    Improper Control of Generation of Code ('Code Injection')