Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain account with admin.pages/api.pages.write
-
DeliveryInject Class::method callable into page frontmatter
-
ExploitBlueprint::dynamicData() reaches call_user_func_array() sink
-
ExecutionVisitor loads poisoned page
-
ImpactArbitrary code runs as web-server user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an authenticated account possessing the Grav admin.pages permission or the api.pages.write permission to inject a malicious 'Class::method' callable directive into a page's frontmatter; this privileged write is the essential prerequisite and the primary limiting factor. Once planted, execution requires only that the affected page be accessed - this second step needs no authentication and can be triggered by any visitor or by the attacker directly, with no user interaction beyond a normal page load. The exploit is confirmed against Grav 2.0.4; deployments that restrict page-write permissions to a single trusted administrator sharply limit who can stage the attack. |
| Impact | The vendor-assigned CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H, base 9.3) rates this as critical and unauthenticated, but that PR:N reflects only the trigger stage - an unauthenticated visitor rendering the poisoned page - not the injection stage, which requires an authenticated account with the admin.pages or api.pages.write permission. In practice this is a two-stage flaw: a privileged authenticated write plants the payload, then unauthenticated execution occurs on access. That materially lowers real-world exploitability versus a pure pre-auth RCE, so treating it strictly as PR:N overstates ease of initial compromise; my independent assessment uses PR:H to reflect the required elevated content-management privilege. Impact is nonetheless full compromise of the web-server context (C/I/A all High). No EPSS score, SSVC decision, KEV listing, or public POC was provided, so exploitation-probability signals are absent - prioritize on the trust model: if untrusted or low-trust users can obtain page-write permissions this is high priority, whereas single-trusted-admin deployments carry lower practical risk. |
| Exploit ScenarioDerived | An attacker with a low-trust editor account (holding admin.pages or api.pages.write) creates or edits a page and embeds a malicious Class::method callable and arguments in the frontmatter. The next time anyone loads that page - the attacker themselves or an unauthenticated site visitor - Blueprint::dynamicData() invokes the callable via call_user_func_array(), executing the attacker's command as the web-server user. No public POC was provided, but the low attack complexity and simple call_user_func_array() sink make exploitation straightforward once page-write access is obtained. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 21, 2026
Remote code execution in Grav CMS 2.0.4 (fixed in 2.0.7) lets an authenticated user holding the admin.pages or api.pages.write permission plant a malicious Class::method callable directive in page frontmatter, which Blueprint::dynamicData() feeds unfiltered into call_user_func_array(). The injected command then executes as the web-server user for any subsequent visitor to the page, including unauthenticated ones. Reported by VulnCheck (CWE-94, CVSS 4.0 base 9.3); no public exploit identified at time of analysis and it is not listed in CISA KEV.
RemediationAI
Vendor-released patch: upgrade to Grav 2.0.7 or later, which introduces restrictions on the callable resolution path; this is the primary and recommended fix, per advisory GHSA-fj2p-qj2f-74v5 (https://github.com/getgrav/grav/security/advisories/GHSA-fj2p-qj2f-74v5). If immediate patching is not possible, tighten the trust boundary that gates the attack: audit and minimize accounts holding admin.pages and api.pages.write so only fully trusted operators can create or edit pages, and disable or restrict the admin panel and Pages API to trusted networks - trade-off is reduced content-editing convenience and possible workflow disruption for delegated editors. Additionally, review existing pages for unexpected callable/Class::method directives in frontmatter, and run the web server under a least-privileged account to limit the blast radius of any code that does execute.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Grav is a PHP-based flat-file content management system (cpe:2.3:a:getgrav:grav). The root cause is CWE-94 (Code Injection): Blueprint::dynamicData() in system/src/Grav/Common/Data/Blueprint.php accepts a callable expressed as a 'Class::method' string plus arguments and dispatches it straight to PHP's call_user_func_array() with no allowlist or type restriction on which classes or methods may be invoked. Because the form plugin routes page frontmatter through the blueprint dynamic-data resolution path, attacker-controlled frontmatter becomes an attacker-controlled callable. This converts a data-binding mechanism into an arbitrary-code-execution primitive whenever the affected page is rendered.
Know when Grav 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:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Injection requires the elevated admin.pages/api.pages.write permission so PR:H; network-reachable simple callable sink gives AC:L, and full code execution yields C/I/A High with no scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Grav 2.0.4 (fixed in 2.0.7) contains a remote code execution vulnerability in Blueprint::dynamicData() (system/src/Grav/Common/Data/Blueprint.php), which passes a Class::method callable string and its arguments directly to call_user_func_array() without any allowlist. Because the form plugin routes page frontmatter through this path, an authenticated account with the admin.pages (or api.pages.write) permission can plant a malicious callable directive in a page. The command then executes as the web-server user whenever anyone - including an unauthenticated visitor - accesses the page.
Articles & Coverage 2
Executive ViewAI
Grav CMS version 2.0.4 contains a critical remote code execution vulnerability affecting administrative users with specific page editing permissions. Attackers with admin.pages or api.pages.write privileges can inject malicious code that executes for all subsequent website visitors, compromising site integrity and potentially exposing all users to attack.
No vendor-released patch identified at time of analysis. Implement immediate compensating controls: (1) strictly limit admin.pages and api.pages.write permissions to essential personnel only; (2) audit and lock down all pages, restricting edit capabilities; (3) implement Web Application Firewall (WAF) rules to detect and block suspicious call_user_func_array patterns; (4) enable comprehensive logging and monitoring of page modifications and website activity; (5) prepare and validate upgrade procedure for Grav CMS 2.0.7 when available.
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
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Server-side template injection (SSTI) in Grav (getgrav/grav) prior to 1.8.0-beta.27 allows an authenticated attacker hol
Broken access control in Grav CMS (CWE-285) before 1.8.0-beta.27 lets an authenticated editor-level user escalate their
A Remote Code Execution (RCE) vulnerability in Grav CMS v1.7.48 allows an authenticated admin to upload a malicious plug
Grav is a file-based Web platform. Rated critical severity (CVSS 9.9), this vulnerability is remotely exploitable, low a
GravCMS 1.10.7 allows unauthenticated remote attackers to write arbitrary YAML configuration files, leading to full serv
Remote code execution in Grav CMS before 2.0.15 allows attackers holding page-edit or blueprint-config privileges to wri
Vertical privilege escalation in Grav CMS before 2.0.14 lets a delegated administrator holding only the admin.users perm
Stored cross-site scripting in Grav CMS before 2.0.15 lets authenticated editors smuggle JavaScript event handlers past
Server-side request forgery (SSRF) in Grav CMS versions prior to 1.7.49.5 allows remote authenticated attackers to make
Grav is a file-based Web platform. Prior to 1.8.0-beta.27, Grav CMS is vulnerable to a Server-Side Template Injection (S
Remote code execution in Grav CMS before 2.0.13 allows authenticated low-privilege users to plant and execute arbitrary
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
EUVD-2026-46183
GHSA-3q93-h5p2-5mx8
NVD
CVE.org
EPSS
Exploit-DB
VulDB