Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain api.access + api.users.write account
-
DeliveryCraft invitation payload with dot-keyed 'api.super' flag
-
ExploitSubmit to InvitationsController
-
InstallstripSuperFlags() bypassed, flag persists to invitation record
-
C2Self-accept invitation via public endpoint
-
ExecuteReceive super-admin JWT
-
ImpactFull Grav site control
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
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 | The attacker must hold an existing API account with both api.access and api.users.write permissions - these are manager-level grants, not default new-user privileges. Grav deployments that issue api.users.write only to fully trusted administrators have no exposure from external or semi-trusted actors. The public invitation-acceptance endpoint must be network-reachable, which is the default for any Internet-facing Grav installation. No non-default plugin configuration is required beyond the permissions above. Critically, the invitation-acceptance step does not require a real invitee to click a link or provide any input - the attacker self-accepts the invitation, removing the social-engineering dependency that normally constrains invitation-abuse attacks. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N - 8.7) accurately reflects the key risk profile: network-reachable, low complexity, and no user interaction once the attacker holds a manager-level account. The PR:L constraint is the single meaningful gate - exploitation requires an existing API account with both api.access and api.users.write, which is a non-trivial privilege but one that may be granted to semi-trusted internal users or contractors in multi-user Grav deployments. Once those permissions exist, the attack is deterministic and requires no guesswork. The full VC:H/VI:H/VA:H impact is well-supported: a super-admin JWT provides unrestricted access to all Grav CMS content and administrative functions. No CISA KEV listing and no known public PoC reduce immediacy for externally facing systems, but the threat is significant in any environment where api.users.write is distributed beyond a single trusted operator. The self-contained invitation acceptance mechanism eliminates the social-engineering dependency that typically limits invitation-abuse vulnerabilities, making this easier to exploit than a standard privilege-escalation path. |
| Exploit ScenarioDerived | An attacker who already holds a Grav API account with api.access and api.users.write (e.g., a contractor or semi-trusted internal user) submits a POST to the InvitationsController with an access payload containing the flat key 'api.super': true. The stripSuperFlags() method passes the payload through without modification because it only checks nested flag structures. The attacker then sends a GET/POST to the public invitation-acceptance endpoint referencing their own invitation token, instantly creating a new account with super-admin privileges and receiving a signed JWT for full site control - all without the participation of a legitimate invitee. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 05, 2026
Privilege escalation in grav-plugin-api before 1.0.20 allows a low-privileged API manager to self-create a super-admin account by exploiting a logic gap in the InvitationsController's stripSuperFlags() method, which strips nested super flags but ignores dot-keyed equivalents such as 'api.super'. The attacker crafts an invitation payload containing the dot-keyed flag, which persists through sanitization into the new account, then self-accepts the invitation via the public acceptance endpoint - no real invitee participation required - and immediately receives a valid JWT granting full Grav site control. No public exploit or CISA KEV listing is present at time of analysis, but the attack is fully self-contained and conceptually trivial for any account already holding api.users.write permissions.
RemediationAI
Upgrade grav-plugin-api to version 1.0.20 or later, which patches InvitationsController's stripSuperFlags() to also strip dot-keyed super flag equivalents such as 'api.super'. The fix is documented in GHSA-m363-3hww-gcwc at https://github.com/getgrav/grav/security/advisories/GHSA-m363-3hww-gcwc and detailed in the VulnCheck advisory at https://www.vulncheck.com/advisories/grav-plugin-api-1.0.0-through-1.0.19-privilege-escalation-via-dot-keyed-super-flag. For sites that cannot patch immediately, revoke the api.users.write permission from all non-super accounts - this removes the ability to craft malicious invitation payloads, though it will break legitimate manager-level user-management workflows. A more aggressive but complete workaround is disabling the invitation feature in the plugin configuration entirely, which closes the attack path with no trade-off beyond loss of the invite-based onboarding flow.
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 is a flat-file PHP CMS; grav-plugin-api (CPE: cpe:2.3:a:getgrav:grav-plugin-api) is an optional REST API layer that adds user-management endpoints including invitation-based account creation. The InvitationsController is responsible for sanitizing invitation payloads before persisting them. The root cause is CWE-269 (Improper Privilege Management): stripSuperFlags() handles super-admin flags expressed as nested structures (e.g., {'api': {'super': true}}) but does not account for their dot-notation flat equivalents (e.g., {'api.super': true}). Both forms are semantically equivalent in Grav's permission system, so the dot-keyed variant passes through the guard intact, gets written to the invitation record, and is applied verbatim when the invitation is accepted. Because the acceptance endpoint is publicly accessible, the attacker can accept their own crafted invitation without social engineering, receiving a JWT with super-admin scope on acceptance.
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
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
Requires low-privilege API account (PR:L); attacker self-accepts invitation with no user interaction; full CIA compromise within the same Grav application (S:U).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
grav-plugin-api versions before 1.0.20 contain a privilege escalation vulnerability in the InvitationsController where the stripSuperFlags() method only removes nested super flags but fails to strip dot-keyed equivalents like api.super. A non-super user manager with api.access and api.users.write permissions can create an invitation with a dot-keyed super flag in the access payload that bypasses the guard and persists to the new account. Attackers can accept the invitation through the public endpoint without real invitee interaction to create a super-admin account and immediately receive a valid JWT for full site control.
Technical POC Analysis
CWE-269: Improper Privilege Management.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A privilege escalation vulnerability in grav-plugin-api allows any account with API manager permissions to self-create super-admin accounts, achieving complete control over Grav CMS sites and all hosted content. Although no public exploits have been identified, the attack is straightforward to execute for accounts with existing API access, requiring immediate action to restrict permissions and monitor for unauthorized admin account creation.
Until vendor patch becomes available: strictly limit api.users.write permissions to essential personnel only; implement comprehensive API audit logging focused on invitation and account creation events; disable the grav-plugin-api entirely if not actively required; enforce multi-factor authentication on all administrative accounts; establish daily automated reviews of super-admin account lists for unauthorized additions; monitor for unusual API activity patterns or invitation acceptance outside normal business hours; segment network access to Grav installations containing sensitive data.
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
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
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 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
Scope enforcement is entirely absent in the Grav API Plugin prior to 1.0.6, meaning any scoped API key silently exercise
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-71997
GHSA-rg66-gwrp-wj75
NVD
CVE.org
EPSS
Exploit-DB