Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain or compromise API key with api.users.write
-
DeliveryEnumerate valid non-super Grav username
-
ExploitPOST /api/v1/users/{user}/2fa/disable without TOTP code
-
Execution2FA silently removed from target account
-
PersistAuthenticate to Grav admin with target's password alone
-
ImpactFull account takeover achieved
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication required for critical functions
MITRE ATT&CK
1 technique across 1 tactic: Initial Access 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 possess a valid API key meeting one of two criteria: (a) the key is associated with a non-super account whose ACL includes api.users.write permission, or (b) the key is any scoped key associated with a super account, since api_key_scopes caps are never enforced on the disable2fa path regardless of declared scope. The target of the attack must be a non-super user account - super accounts cannot be targeted via this endpoint. The grav-plugin-api plugin must be installed at version 1.0.12 or earlier, and the /api/v1/users/{user}/2fa/disable endpoint must be network-accessible. The attacker must know or enumerate a valid non-super username. Key limiting factors: a valid authenticated API key is required (PR:L - unauthenticated exploitation is not possible); super accounts are not targetable; and exploitation depends on the plugin being installed, which is not a default Grav configuration. |
| Impact | The CVSS 4.0 score of 8.7 (AV:N/AC:L/PR:L) reflects network-accessible exploitation requiring only a valid API key with no complexity barriers beyond credential possession. SSVC signals amplify concern: the attack is rated Automatable with Total Technical Impact, meaning exploitation can be scripted at scale against any environment exposing the Grav API with delegated write-scoped keys. Countering this urgency is an EPSS score of 0.34% (28th percentile), indicating low near-term exploitation probability; SSVC also lists Exploitation as 'none', consistent with no CISA KEV entry and no identified public proof-of-concept. The divergence between high CVSS and SSVC Technical Impact versus low EPSS and exploitation status suggests a real architectural flaw that has not yet attracted active attacker attention - a common pattern for CMS plugin vulnerabilities requiring non-default plugin installation. Priority should be high for deployments using API keys with delegated write permissions, and lower for internally-only or air-gapped Grav instances where the API surface is not externally reachable. |
| Exploit ScenarioDerived | An attacker holding a narrow-scope API key - obtained through credential theft, a key leaked in a public repository, or insider access - sends a crafted POST request to /api/v1/users/{target_username}/2fa/disable targeting a non-super Grav account. The missing requirePermission() call allows the request to succeed regardless of the key's declared scope, stripping 2FA from the target account without requiring a TOTP code. The attacker then authenticates to the Grav admin panel using only the target user's password, achieving full account takeover. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Aug 24, 2026
Force-disabling of two-factor authentication on Grav CMS user accounts is achievable through a missing scope enforcement check in the grav-plugin-api Composer package before version 1.0.13. Any holder of a low-privilege API key carrying api.users.write permission - or any scoped key on a super account - can POST to /api/v1/users/{user}/2fa/disable without supplying a TOTP code, stripping 2FA from any non-super target account and enabling direct account takeover. No active exploitation is currently confirmed (SSVC Exploitation: none; EPSS 0.34%), but SSVC rates this automatable with total technical impact, making prompt patching critical for any instance exposing the API with delegated keys.
Earlier versions of this analysis (1)
Authorization scope bypass in getgrav/grav-plugin-api (Composer package <= 1.0.12) lets a holder of a narrow-scope API key on a super account, or any non-super account carrying api.users.write, force-disable two-factor authentication on arbitrary non-super accounts. The disable2fa endpoint authorizes only through ACL reads and never calls requirePermission(), so the api_key_scopes cap that constrains the sibling generate2fa endpoint is silently skipped. No TOTP code is required, and stripping a victim's 2FA is a direct enabler for account takeover; no public exploit identified at time of analysis.
RemediationAI
Upgrade grav-plugin-api to version 1.0.13 or later, which introduces proper requirePermission() enforcement on the disable2fa endpoint, aligning it with the sibling generate2fa endpoint. The vendor advisory at https://github.com/getgrav/grav/security/advisories/GHSA-22p9-6fh4-mmf2 provides upgrade guidance. For administrators who cannot immediately patch, audit all issued API keys and revoke any with api.users.write scope that are not explicitly required, reducing the attacker-reachable key surface without affecting core CMS functionality. As an additional compensating control, restrict external network access to the path /api/v1/users/*/2fa/disable at the web server or reverse proxy layer - this prevents exploitation from untrusted networks while preserving internal administrative use, though it does not resolve the underlying flaw and must not substitute for patching.
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 getgrav/grav-plugin-api Composer package provides a REST API layer for Grav, a PHP flat-file CMS. The root cause is CWE-306 (Missing Authentication for Critical Function): the disable2fa endpoint handler performs ACL reads - checking isSuperAdmin and hasPermission - to gate cross-user administrative operations, but unlike its sibling generate2fa endpoint, it never calls requirePermission(), the function responsible for enforcing api_key_scopes caps. This means the scope ceiling on API keys is never applied to the disable2fa path. CPE data (cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:*) confirms all Grav installations running grav-plugin-api 1.0.12 or earlier are within scope. The api_key_scopes mechanism was designed to constrain API keys to specific operation types even when issued to privileged accounts; its omission creates a privilege escalation bypass exclusively on the 2FA disable operation.
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-accessible (AV:N), low complexity (AC:L), valid API key required (PR:L), attack modifies other users' accounts constituting a scope change (S:C), no availability impact (A:N).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
5DescriptionCVE.org
The getgrav/grav-plugin-api Composer package before 1.0.13 (affected <= 1.0.12) fails to enforce API key scope caps on the disable2fa endpoint. Unlike the sibling generate2fa endpoint, disable2fa authorizes the admin (non-self) path solely via ACL reads (isSuperAdmin/hasPermission) and never invokes requirePermission(), so the api_key_scopes cap is never applied. As a result, a holder of a narrow-scope API key on a super account, or a non-super account whose ACL includes api.users.write, can force-disable two-factor authentication on any non-super target account via POST /api/v1/users/{user}/2fa/disable without providing a TOTP code, facilitating account takeover.
Executive ViewAI
Grav CMS installations using grav-plugin-api before version 1.0.13 are vulnerable to two-factor authentication bypass, allowing attackers with delegated API keys to completely compromise user accounts and circumvent multi-factor protections. Organizations deploying Grav CMS with exposed APIs face immediate risk of unauthorized account access and potential data breaches, making prompt patching critical for security posture.
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-58636
GHSA-993x-642g-h4x5
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB