Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Grav deployment and configured asset base path
-
DeliveryEnumerate or guess sibling directory names extending asset base
-
ExploitCraft unauthenticated HTTP GET for /assets-[sibling]/target-file
-
ExecutionString prefix check in index.php incorrectly validates request
-
PersistStatic handler resolves and serves file from sibling directory
-
ImpactExfiltrate sensitive configuration or data files
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the Grav installation has at least one sibling directory in the web root whose name begins with the configured asset base string (e.g., a directory named 'assets-backup', 'assets-private', or 'assets-vendor' adjacent to the legitimate 'assets' directory). The attacker must additionally know or guess a valid filename within that sibling directory, as no directory listing is implied by the vulnerability. No authentication is required - the CVSS 4.0 PR:N metric and CVE description both confirm unauthenticated access. Sites where no sibling directory with a name extending the asset base string exists are not exploitable regardless of Grav version. The CVSS 4.0 AT:P metric explicitly encodes this deployment dependency, and AC:H reflects that successful exploitation is contingent on this environmental condition rather than universally achievable. |
| Impact | The provided CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N) scores 8.2, reflecting a network-reachable, unauthenticated, high-confidentiality-impact flaw that is nonetheless conditioned on a specific deployment state. Both AC:H and AT:P encode the same real-world constraint: a sibling directory whose name begins with the asset base string must exist on the target host and contain content worth exfiltrating. This condition is plausible - naming conventions like assets-private, assets-backup, or assets-vendor are natural - but not universal, meaning a large fraction of Grav deployments may not be exploitable even without patching. There is no CISA KEV listing and no public proof-of-concept identified in the provided intelligence, which is consistent with targeted rather than opportunistic exploitation. The confidentiality-only impact (VI:N, VA:N in CVSS 4.0) bounds the blast radius: attackers can read files accessible to the web process but cannot write, delete, or disrupt availability. Real-world priority is moderate-high: the patch is available and the fix cost is low, but the deployment condition prevents treating this as a universal emergency. |
| Exploit ScenarioDerived | An attacker targeting a Grav site enumerates the web root and identifies or guesses that a directory named assets-private exists alongside the legitimate assets directory, perhaps because the application uses a predictable naming convention for private uploads or backup files. The attacker sends an unauthenticated HTTP GET request for /assets-private/config.yaml; index.php evaluates that the path string starts with 'assets', considers it a valid asset request, and serves the file directly, returning sensitive configuration data including database credentials or API keys. No special tooling is required - a standard HTTP client or browser suffices. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 18, 2026
Path traversal in Grav CMS before 2.0.15 allows unauthenticated remote attackers to read arbitrary files from sibling directories outside the intended asset root by exploiting a string prefix collision in the static asset handler. The index.php front controller validates asset paths using a simple string prefix check rather than normalized directory-boundary logic, so a request for /assets-private/credentials.yaml passes validation when /assets is the configured base. No public exploit code has been identified and this vulnerability is not in the CISA KEV catalog; the CVSS 4.0 score of 8.2 reflects high confidentiality risk conditioned on a specific deployment layout (AT:P) rather than universal exploitability.
RemediationAI
Upgrade Grav to version 2.0.15 or later, which replaces the string prefix check in the static asset handler with proper directory-boundary validation. The vendor patch is documented in GitHub security advisory GHSA-4v9q-p283-qc2m at https://github.com/getgrav/grav/security/advisories/GHSA-4v9q-p283-qc2m. If an immediate upgrade is not possible, audit the web root for any directories whose names begin with the configured asset base string (commonly 'assets') and either rename them to eliminate the prefix collision - noting that application references must be updated accordingly - or restrict web server access to those directories via nginx location blocks or Apache .htaccess deny rules, which prevents the server from serving their contents even if index.php routes requests to them. Renaming is the cleaner compensating control since it eliminates the routing condition entirely, while web server access controls are effective but must be carefully scoped to avoid blocking legitimate traffic.
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 flat-file PHP CMS that uses a single index.php front controller to route requests, including static asset serving. The vulnerability resides in the static asset handler within that controller, which determines whether a URL path is a valid asset request by checking whether the path string starts with the configured asset base (e.g., 'assets'). This is a CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) instance that does not require classic ../.. sequences - instead, the prefix collision allows any directory whose name begins with the asset base string to be accessed as if it were the legitimate asset directory. For example, /assets-backup/database.php shares the 'assets' string prefix and is incorrectly served. CPE cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:* covers all versions prior to 2.0.15; the fix documented in GHSA-4v9q-p283-qc2m replaces the prefix check with proper directory-boundary normalization.
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:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Network-reachable, no privileges or user interaction needed, but AC:H because exploitation requires a specific sibling directory naming condition; confidentiality-only, no integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Grav before 2.0.15 contains a path traversal vulnerability in the static asset server within index.php that uses string prefix matching instead of directory-boundary validation. Unauthenticated attackers can access files in sibling directories by exploiting directory names that extend the base path string, such as requesting assets-secret when assets is the configured base.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
Grav CMS versions before 2.0.15 contain a path traversal vulnerability allowing unauthenticated attackers to read sensitive files outside the intended asset directory, such as configuration files and credentials. Organizations running affected versions face direct exposure of confidential data without requiring authentication.
No vendor-released patch identified at time of analysis. Implement immediate mitigations: (1) restrict filesystem read permissions on sensitive configuration files to application user only, (2) segregate confidential files outside the web-accessible directory structure, (3) deploy WAF rules blocking requests with directory traversal patterns (/assets-private/, ../, etc.), (4) implement strict input validation and canonical path normalization in the static asset handler, and (5) monitor access logs for exploitation attempts.
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
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
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 2.0.4 (fixed in 2.0.7) lets an authenticated user holding the admin.pages or api.pages
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
EUVD-2026-60588
GHSA-2rhw-8953-48q3
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB