Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
UI:R required as victim must navigate; PR:N since attacker holds no account; C:N as no data is exposed; I:L and A:L for TOTP invalidation impact only.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
grav-plugin-login before 3.8.11 contains a cross-site request forgery (CSRF) vulnerability in the login.regenerate2FASecret frontend task, which regenerates and persists a new TOTP secret for the authenticated session user without any anti-CSRF nonce or Origin/Referer check. Because Grav core dispatches the task from the GET 'task:' URI parameter and the default session cookie is SameSite=Lax, an attacker can lure a logged-in victim to an off-site page that performs a top-level GET navigation, rotating the victim's TOTP secret so their enrolled authenticator no longer matches the server, effectively forcing 2FA re-enrollment. Sites configured with session.samesite: Strict are not affected.
AnalysisAI
CSRF in grav-plugin-login before 3.8.11 allows a remote unauthenticated attacker to rotate a logged-in victim's TOTP secret by luring them to an attacker-controlled page that performs a top-level GET navigation to the Grav site's regenerate2FASecret task endpoint. Because Grav dispatches frontend tasks via GET URI parameters and the default SameSite=Lax session cookie policy permits cross-origin top-level GET navigations to carry cookies, the victim's authenticator app is silently invalidated, forcing 2FA re-enrollment - though the attacker gains no account access. No public exploit has been identified at time of analysis; CVSS 4.0 score is 2.3, reflecting genuinely low severity.
Technical ContextAI
Grav CMS uses a flat-file architecture and dispatches frontend task actions through the GET 'task:' URI parameter (e.g., ?task=login.regenerate2FASecret), which makes all such task endpoints inherently reachable via browser navigation. The grav-plugin-login component handles TOTP-based two-factor authentication enrollment, including a task that regenerates and persists a new TOTP shared secret to the authenticated user's profile. The root cause is CWE-352 (Cross-Site Request Forgery): the regenerate2FASecret handler performs a server-side state change without validating any anti-CSRF nonce, nor does it inspect Origin or Referer headers to confirm the request originated from the same site. The browser's SameSite=Lax default cookie policy is the key enabler - Lax permits session cookies to be attached to cross-origin top-level GET navigations (link clicks, window.location assignments), so a victim's session is indistinguishable from an intentional self-request when navigating from an attacker page. The CPE cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:* covers all Grav versions prior to the plugin fix at 3.8.11.
RemediationAI
Upgrade grav-plugin-login to version 3.8.11 or later, which is the vendor-released patch confirmed by the security advisory at https://github.com/getgrav/grav/security/advisories/GHSA-4px8-7p53-282r. For sites that cannot immediately update, setting session.samesite=Strict in the Grav site configuration is an effective compensating control that completely blocks this attack by preventing the browser from sending session cookies on any cross-origin navigation - note that this may break legitimate cross-site login redirects or SSO flows if your deployment relies on them, so evaluate the trade-off before applying. No other specific workarounds are documented in available references.
Grav is a file-based Web platform. Prior to 1.8.0-beta.27, a Server-Side Template Injection (SSTI) vulnerability exists
Grav is a file-based Web platform. Prior to 1.8.0-beta.27, due to improper authorization checks when modifying critical
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
Grav is a file-based Web platform. Prior to 1.8.0-beta.27, a user with admin panel access and permissions to create or e
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
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot
Same weakness CWE-352 – Cross-Site Request Forgery (CSRF)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-45082
GHSA-f4c6-8fcq-j58x