Skip to main content

grav-plugin-api EUVDEUVD-2026-71997

| CVE-2026-86195 HIGH
Improper Privilege Management (CWE-269)
2026-09-05 VulnCheck GHSA-rg66-gwrp-wj75
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Obtain api.access + api.users.write account
  2. Delivery
    Craft invitation payload with dot-keyed 'api.super' flag
  3. Exploit
    Submit to InvitationsController
  4. Install
    stripSuperFlags() bypassed, flag persists to invitation record
  5. C2
    Self-accept invitation via public endpoint
  6. Execute
    Receive super-admin JWT
  7. Impact
    Full 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

grav-plugin-api 0 <1.0.20

Affected Packages

euvd grav_plugin_api fix: 1.0.20

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

Vendor (VulnCheck) PRIMARY 8.7 HIGH
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
vuln.today AI 8.8 HIGH

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).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 05, 2026 - 14:16 EUVD
CVE Published
Sep 05, 2026 - 12:09 cve.org
HIGH 8.7

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Low
niche flat-file CMS with optional API plugin add-on
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
High

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2026-86196 HIGH POC
8.7 Sep 05

Host header injection in the Grav API plugin's forgot-password endpoint allows unauthenticated remote attackers to redir

CVE-2026-62668 CRITICAL
9.4 Aug 19

Server-Side Request Forgery in the Grav API plugin (grav-plugin-api) for Grav CMS before 1.0.6 lets a caller holding the

CVE-2026-112779 CRITICAL
9.3 Oct 19

Unauthenticated resource exhaustion in the Grav API plugin (grav-plugin-api) before 1.0.42 allows any remote attacker wh

CVE-2026-62666 HIGH
8.8 Aug 19

Privilege escalation in Grav API Plugin (all versions before 1.0.6) allows any authenticated user holding the api.users.

CVE-2026-86193 HIGH
8.7 Sep 05

Privilege escalation in grav-plugin-api before 1.0.20 allows authenticated API users holding api.access and api.users.wr

CVE-2026-109317 HIGH
8.6 Oct 12

Privilege escalation in the Grav API plugin (grav-plugin-api) before 1.0.36 allows an account that already holds the api

CVE-2026-63407 HIGH
8.2 Aug 19

Permissive CORS misconfiguration in the Grav API Plugin (all versions prior to 1.0.0-rc.16) allows cross-origin JavaScri

CVE-2026-62667 HIGH
8.1 Aug 19

Scope enforcement is entirely absent in the Grav API Plugin prior to 1.0.6, meaning any scoped API key silently exercise

CVE-2026-63408 HIGH
7.5 Aug 19

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

CVE-2026-109320 MEDIUM
5.3 Oct 12

Disabled accounts in Grav API plugin versions before 1.0.36 can continue to access API endpoints because SessionAuthenti

CVE-2026-11982 MEDIUM
5.1 Jun 18

Stored XSS in Grav CMS's grav-plugin-api (Admin2) allows a low-privileged editor to persist malicious JavaScript in page

CVE-2026-61607 MEDIUM
4.6 Aug 19

Stored cross-site scripting in the Grav API Plugin (all versions prior to 1.0.2) allows an authenticated attacker holdin

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy