Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain api.access key on super account
-
DeliveryCraft createApiKey POST with empty scopes array
-
ExploitServer mints unrestricted super key
-
ExecutionAuthenticate with new full-access key
-
PersistWrite malicious Grav configuration
-
ImpactAchieve remote code execution
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Privilege assignment review
|
| Exploitation Conditions | Exploitation requires the attacker to possess a valid API key scoped with at minimum the api.access permission AND that key must be associated with a super account in Grav (i.e., the account backing the key must hold super privileges at the application level). The vulnerability is triggered via the createApiKey API endpoint over the network; no special network position or man-in-the-middle capability is required. What limits exploitation: the attacker must have already obtained some form of API key on a super account - pure external attackers with no prior credential hold cannot exploit this directly. Non-super accounts cannot exploit this flaw to generate super keys regardless of scopes held. No user interaction is required once the key is in hand. Default Grav installations that have not provisioned any API keys are not exposed to this specific attack path. |
| Impact | The CVSS 4.0 score of 8.7 accurately reflects the high-impact outcome (full confidentiality, integrity, and availability compromise of the Grav instance) achievable over the network with only low privilege. The key qualifying condition - the attacker must already hold a minimal-scope API key tied to a super account - represents a meaningful prerequisite that reduces real-world exposure compared to an unauthenticated vulnerability, but once satisfied the exploitation step is trivially simple: a single crafted HTTP request. EPSS at 0.30% (23rd percentile) signals low current automated exploitation activity, consistent with the absence of a CISA KEV listing, though the technique is straightforward enough that any operator running an exposed Grav API endpoint should treat this as urgent regardless of the low EPSS figure - even a mid-sized municipal IT team in mielec running a Grav-powered intranet on a super-privileged API account would face a realistic escalation path. The most significant real-world risk multiplier is the downstream RCE chain: configuration-write access in Grav can be leveraged to achieve arbitrary code execution, elevating the effective impact well beyond the API privilege boundary. No POC or KEV evidence is present, but the attack is self-evidently reproducible from the description alone. |
| Exploit ScenarioDerived | An attacker who has previously obtained a minimal-scope API key associated with a super account - for example, through credential reuse, a prior lower-severity disclosure, or social engineering - sends a single HTTP POST to the Grav API's createApiKey endpoint with a JSON body specifying an empty scopes array. The server, performing no subset-intersection check, mints and returns a new API key with full super-account privileges and no scope restrictions. The attacker then uses this unrestricted key to write arbitrary content to the Grav configuration, achieving remote code execution on the underlying server. No public exploit code is confirmed, but the attack is reproducible directly from the vulnerability description. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Aug 24, 2026
Privilege escalation in the getgrav/grav-plugin-api plugin before 1.0.13 allows an authenticated attacker holding only a minimal api.access-scoped key on a super account to mint a full-access, unscoped super key by exploiting missing scope-subset enforcement in createApiKey. The self-target path of requireApiKeyPermission() enforces only the baseline api.access scope, while the new key's scopes are taken verbatim from the attacker-controlled request body with no validation that they fall within the caller's granted scopes. Submitting an empty scopes array produces a key with unrestricted super privileges, directly enabling further attack chains including configuration-write-to-RCE. No public exploit code or CISA KEV listing is confirmed at time of analysis; EPSS is 0.30% (23rd percentile). Vendor-released patch version 1.0.13 is available.
Earlier versions of this analysis (1)
Privilege escalation in the Grav CMS API plugin (getgrav/grav-plugin-api before 1.0.13) allows an attacker who already holds a minimal-scope API key on a super account to mint a brand-new, unscoped full-access super key. The createApiKey routine reads the requested scopes directly from the request body and never verifies they are a subset of the caller's scopes, while the self-target branch of requireApiKeyPermission() only demands the baseline api.access scope. Submitting an empty scopes array yields an unrestricted key, and no public exploit has been identified at time of analysis; the plugin vendor has shipped a fix in 1.0.13.
RemediationAI
The primary fix is to upgrade the getgrav/grav-plugin-api plugin to version 1.0.13 or later, as confirmed by the vendor security advisory at https://github.com/getgrav/grav/security/advisories/GHSA-95v9-4fcj-96gh; this release introduces scope-subset validation in createApiKey so that a caller can never assign scopes beyond those already granted to their own key. If immediate upgrade is not possible, a targeted compensating control is to revoke or suspend all API keys that carry super-account privileges and restrict API key creation to console-only administrative sessions, removing the attack surface entirely until the patch can be applied; the trade-off is that any automation relying on API-key-based super access will break. Additionally, network-layer access controls (firewall rules or reverse-proxy authentication) restricting the Grav API endpoint to trusted IP ranges will materially raise the bar for exploitation by reducing the pool of callers who can reach the vulnerable endpoint at all. The side effect of this control is reduced API accessibility for legitimate remote integrations.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Grav CMS is a flat-file PHP content management system; the affected component is its REST API plugin (cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:* versions before 1.0.13). The flaw is rooted in CWE-266 (Incorrect Privilege Assignment): the createApiKey endpoint relies on requireApiKeyPermission() to gate access, but that function's self-target code path only verifies the caller holds api.access - the baseline scope permitting API key operations - rather than verifying the scopes being assigned to the new key are a subset of the caller's own scopes. Because the new key's scope list is deserialized directly from the HTTP request body without a subset-intersection check, the authorization model is broken: any caller with api.access on a super account can write arbitrary scope claims into a freshly minted key. Submitting an empty array exploits the absence of a 'scopes must not exceed caller scopes' invariant to produce an effectively omnipotent key. The CWE-266 class describes exactly this: a component assigns privileges beyond those the principal is entitled to grant.
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:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable API endpoint; low privilege (api.access key required); no user interaction; high CIA impact within the same application scope.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
5DescriptionCVE.org
The getgrav/grav-plugin-api plugin before 1.0.13 fails to validate that the scopes of a newly created API key are a subset of the caller's scopes in createApiKey. The self-target path of requireApiKeyPermission() requires only the baseline api.access scope, and the new key's scopes are read directly from the request body with no subset check. An attacker holding a minimal-scope API key on a super account can submit an empty scopes array to mint an unscoped, full-access super key, bypassing scope restrictions (and enabling further chains such as configuration write to RCE).
Executive ViewAI
Grav CMS installations running the API plugin before version 1.0.13 are vulnerable to privilege escalation, allowing API users with restricted access to gain complete administrative control. No public exploit has been identified at time of analysis, but the vulnerability enables data theft, unauthorized configuration changes, and potential remote code execution. A vendor patch is available and must be deployed immediately to prevent account compromise.
Apply vendor patch.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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-58640
GHSA-6959-h8j7-rr7m
NVD
CVE.org
EPSS
VulDB
Exploit-DB