Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain low-privilege Grav account with install access
-
DeliveryCraft decompression bomb ZIP archive
-
ExploitSubmit archive via admin panel or GPM install path
-
ExecutionZipArchiver::extract() calls ZipArchive::extractTo() without limit checks
-
PersistArchive expands to exhaust disk space or inodes
-
ImpactGrav site becomes unavailable
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Compression ratio limits
|
| Exploitation Conditions | Exploitation requires an authenticated Grav session with sufficient privileges to upload or install archives through any code path invoking Archiver::create('zip') - specifically the ZipArchiver::extract() path triggered during plugin, theme, or package installation via the admin panel or GPM. The CVSS PR:L metric confirms that full administrative access is not required; a low-privilege account with upload or install capability is sufficient. The Grav admin panel or GPM must be enabled and accessible, which is the default configuration for sites using the Grav admin plugin. No special protocol, non-default setting, or external service is required beyond an accessible authenticated session. Exploitation is bounded by its pure availability impact: an attacker cannot read or modify data, only exhaust storage resources. Deployments where archive upload functionality is entirely disabled or inaccessible to non-admin users have a reduced but not eliminated attack surface. |
| Impact | CVSS 6.5 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H) accurately represents the threat profile: network-accessible, low complexity, requiring only a low-privilege authenticated account, with pure availability impact and no confidentiality or integrity exposure. KEV status is negative and no public exploit code has been identified, placing this in a 'track and patch' posture rather than emergency response for most organizations. EPSS data was not supplied in the intelligence feed, so probabilistic exploitation likelihood cannot be quantified from this dataset - that is a gap in the available signals. The realistic risk is highest in shared-hosting or resource-constrained environments where disk exhaustion would cascade to affect co-located services; a mid-sized IT operation running multiple applications on a single server should treat this as a prompt patching-cycle item rather than a deferred issue. The absence of scope change (S:U) in the CVSS vector is technically conservative - disk exhaustion inherently affects the underlying host - but the primary, intended impact is the Grav application itself. |
| Exploit ScenarioDerived | An attacker with a low-privilege Grav account (for example, a contributor or editor with plugin upload access) constructs a decompression bomb ZIP - a small compressed file whose entries expand to many gigabytes - and submits it for installation through the Grav admin panel or GPM. ZipArchiver::extract() passes the archive directly to ZipArchive::extractTo() without checking uncompressed size, file count, or nesting depth, causing the extraction to fill available disk space or exhaust inodes. The Grav site and any other services sharing the same filesystem become unavailable. Constructing a decompression bomb is a well-documented, trivially reproducible technique requiring no specialized tooling, though no public exploit targeting this specific code path has been identified. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Disk-exhaustion denial of service in Grav CMS prior to 2.0.1 is reachable through the ZipArchiver::extract() code path, which passes attacker-controlled ZIP archives to PHP's ZipArchive::extractTo() without enforcing the platform's configured limits on uncompressed size, file count, or directory nesting depth. An authenticated attacker with plugin or theme upload access can submit a crafted decompression bomb to exhaust disk space or inodes, rendering the site unavailable. No public exploit code has been identified, and CISA KEV listing is absent; a vendor-released patch is available as of Grav 2.0.1 (June 22, 2026).
RemediationAI
Upgrade to Grav 2.0.1, released June 22, 2026, which introduces pre-extraction limit enforcement in ZipArchiver::extract() matching the caps already applied by GPM\Installer::unZip(). The patched release is available at https://github.com/getgrav/grav/releases/tag/2.0.1 and the fixing commit is https://github.com/getgrav/grav/commit/1c1003cfcab5344203d6fde1aaa1f9a4ee3413ff. If immediate patching is not possible, restrict plugin and theme installation privileges to the smallest set of fully trusted administrator accounts, reducing the pool of principals who can supply attacker-controlled archives to the vulnerable code path. Additionally, configure server-side disk quota alerts to detect abnormal storage growth early. Note that access restriction does not eliminate risk from compromised admin credentials and is not a substitute for patching.
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 CMS whose plugin management system (GPM) includes two ZIP extraction paths: GPM\Installer::unZip() and the more general ZipArchiver::extract() in system/src/Grav/Common/Filesystem/ZipArchiver.php. CWE-409 (Improper Handling of Highly Compressed Data) is the root cause: PHP's ZipArchive::extractTo() applies no built-in limits on total uncompressed bytes, entry count, or nesting depth, so a crafted ZIP that is tiny on disk can expand to fill an entire volume. Grav's configuration already exposes safe defaults under system.gpm.archive (max_uncompressed_size: 1 GiB, max_files: 50,000, max_depth: 48), but prior to 2.0.1 these limits were read and enforced only by the Installer path; the ZipArchiver path bypassed them entirely. The fix (commit 1c1003cfcab5344203d6fde1aaa1f9a4ee3413ff) adds a pre-extraction pass using ZipArchive::statIndex() to accumulate uncompressed totals and reject over-limit archives before any files are written to disk. CPE: cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:*.
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
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Network-reachable via web upload requiring a low-privilege authenticated account; impact is pure availability via disk exhaustion with no confidentiality or integrity effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Grav is a file-based Web platform. Prior to 2.0.1, Grav ZipArchiver::extract() in system/src/Grav/Common/Filesystem/ZipArchiver.php passes archives to ZipArchive::extractTo() without enforcing the system.gpm.archive uncompressed-size, file-count, or nesting-depth limits. Code using Archiver::create('zip') to extract an attacker-controlled archive can exhaust disk space or inodes and make the site unavailable. This issue is fixed in version 2.0.1.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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-62534
GHSA-928x-9mpw-8h56
NVD
CVE.org
EPSS
VulDB
Exploit-DB