Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain or be issued a valid scoped API key
-
DeliverySend authenticated request to a privileged endpoint (write/delete/admin)
-
ExploitApiKeyAuthenticator returns full owner identity without reading scopes
-
ExecutionrequirePermission() evaluates complete owner ACL
-
PersistScope restriction is bypassed
-
ImpactOperation succeeds at full owner privilege
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires possession of a valid Grav API Plugin API key (corresponding to PR:L in the CVSS vector). The vulnerability is present in the default code path of all installations of the plugin below version 1.0.6 - no non-default configuration, feature flag, or special deployment mode is required; the scope bypass occurs whenever any scoped API key is used for authentication. The key must have been generated by the vulnerable plugin (< 1.0.6). Exploitation is bounded by the owning account's ACL: a key issued by a standard editor cannot exceed editor-level permissions, while a key issued by a super-admin account exposes full administrative capabilities. The limiting factor is that the attacker must have been issued or must have obtained a valid API key for the target site - opportunistic scanning for exploitable endpoints is not viable without a pre-existing key. |
| Impact | The NVD CVSS 8.1 score (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) is well-calibrated: the flaw is network-accessible, requires no user interaction, and yields high confidentiality and integrity impact. The critical qualifying factor is PR:L - exploitation is gated on possession of a valid API key, limiting opportunistic mass exploitation. The real-world threat model centers on trust boundary violations: a service intentionally granted a narrow read scope (e.g., a preview frontend or analytics hook) can quietly escalate to full administrative control of the site. EPSS data was not provided in the input, so exploitation probability cannot be quantified. KEV status is not confirmed, indicating no known active exploitation at time of analysis. No POC code was identified. Despite the high CVSS, the gating requirement of a valid API key and knowledge of the REST API surface meaningfully reduces the realistic attacker pool compared to a fully unauthenticated flaw. The most dangerous scenario involves a super-admin-owned key issued to a less-trusted party, as the full admin ACL becomes accessible. |
| Exploit ScenarioDerived | A third-party analytics service was issued an API key with a read-only scope by a site administrator. Using that key, the service operator calls a privileged REST endpoint such as POST /api/users or DELETE /api/pages/{id}. Because ApiKeyAuthenticator returns the full admin identity without consulting the stored scopes, requirePermission() grants the request based on the admin account's ACL, and the operation succeeds. The administrator has no visibility into this escalation, as the key appeared legitimately scoped at issuance. No public exploit code has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Scope enforcement is entirely absent in the Grav API Plugin prior to 1.0.6, meaning any scoped API key silently exercises its issuing account's full permissions rather than the declared restricted subset. Holders of keys deliberately issued narrow read-only scopes - including third-party integrations and external services - can perform all write, delete, and administrative operations that the key's owning account is authorized for. No public exploit has been identified at time of analysis, but the vulnerability is exploitable by any valid API key holder over the network without user interaction, making supply-chain and insider-threat scenarios the primary risk vectors.
RemediationAI
Upgrade to Grav API Plugin version 1.0.6, the vendor-released patch confirmed by the GitHub release at https://github.com/getgrav/grav-plugin-api/releases/tag/1.0.6 and fix commit dfcc947f0d6758772caac290c68fe8d4c4a4874e. If immediate upgrade is not feasible, the most effective compensating control is to revoke all existing API keys and suspend key-based API access entirely until the patch is applied - this eliminates the attack surface at the cost of disabling API integrations. For sites that cannot tolerate downtime, restrict API endpoint access at the reverse proxy or firewall layer to trusted IP ranges only; this reduces exposure but does not eliminate risk from already-trusted parties exploiting the scope bypass. There is no configuration option within the unpatched plugin to retroactively enforce declared scopes. After upgrading, existing keys should be audited and re-issued with explicit scopes to ensure least-privilege is enforced going forward.
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
The Grav API Plugin exposes a RESTful interface for Grav CMS, a flat-file PHP CMS, with CPE cpe:2.3:a:getgrav:grav-plugin-api:*:*:*:*:*:*:*:*. API keys are generated by ApiKeyManager::generateKey(), which records a scopes array in key metadata specifying which operations the key is permitted to invoke. The architectural flaw is in ApiKeyAuthenticator::authenticate(), which loads keyData but never reads keyData['scopes'], instead returning the full UserInterface object for the owning account. AbstractApiController::requirePermission() subsequently evaluates the owning account's complete ACL via that identity, discarding the scope restriction entirely. CWE-862 (Missing Authorization) precisely characterizes this class: an authorization mechanism is present in the generation path but never consulted in the enforcement path. The fix in commit dfcc947f introduces an authenticatedScopes property stamped onto each request as api_key_scopes, and a scopesPermit() guard inside requirePermission() that caps scoped keys before the account ACL short-circuit - ensuring even a super-admin-owned key with declared scopes cannot bypass the cap.
Know when Grav Plugin Api 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:H/I:H/A:N
Requires a valid API key (PR:L); REST API is network-accessible (AV:N); no availability impact results from scope bypass alone.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Grav API Plugin is a RESTful API for Grav CMS that provides full headless access to your site's content. Prior to 1.0.6, the Grav API plugin ApiKeyManager::generateKey() stores a declared scopes array, but ApiKeyAuthenticator::authenticate() does not read keyData[scopes] and returns the owning user's complete identity. AbstractApiController::requirePermission() consequently evaluates the full user ACL, so a key issued for a read-only scope can perform every write, delete, and administrative operation available to the owner. This issue is fixed in version 1.0.6.
Executive ViewAI
The Grav API Plugin prior to version 1.0.6 contains a critical permission-bypass flaw that allows API keys issued with restricted scopes-intended for read-only or limited access-to silently exercise full account permissions including write, delete, and administrative operations. This vulnerability directly exposes organizations to insider threats and supply-chain compromise, as third-party integrations and external services holding intentionally-scoped keys can escalate to unrestricted system access and data manipulation.
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.
More in Grav Plugin Api
View allHost header injection in the Grav API plugin's forgot-password endpoint allows unauthenticated remote attackers to redir
Server-Side Request Forgery in the Grav API plugin (grav-plugin-api) for Grav CMS before 1.0.6 lets a caller holding the
Unauthenticated resource exhaustion in the Grav API plugin (grav-plugin-api) before 1.0.42 allows any remote attacker wh
Privilege escalation in Grav API Plugin (all versions before 1.0.6) allows any authenticated user holding the api.users.
Privilege escalation in grav-plugin-api before 1.0.20 allows a low-privileged API manager to self-create a super-admin a
Privilege escalation in grav-plugin-api before 1.0.20 allows authenticated API users holding api.access and api.users.wr
Privilege escalation in the Grav API plugin (grav-plugin-api) before 1.0.36 allows an account that already holds the api
Permissive CORS misconfiguration in the Grav API Plugin (all versions prior to 1.0.0-rc.16) allows cross-origin JavaScri
JWT bearer token leakage in the Grav API Plugin for Grav CMS (prior to 1.0.0-rc.16) exposes valid access tokens to any p
Disabled accounts in Grav API plugin versions before 1.0.36 can continue to access API endpoints because SessionAuthenti
Stored XSS in Grav CMS's grav-plugin-api (Admin2) allows a low-privileged editor to persist malicious JavaScript in page
Stored cross-site scripting in the Grav API Plugin (all versions prior to 1.0.2) allows an authenticated attacker holdin
EUVD-2026-62541
NVD
CVE.org
EPSS
GitHub
Exploit-DB