Description
The getgrav/grav-plugin-login Composer plugin before 3.9.1 (used by Grav) compares password reset and account activation tokens using a non-constant-time === string comparison instead of hash_equals() in classes/Controller.php (taskReset()) and login.php (activation handler). Because the token-submission endpoint (taskReset) also lacks rate limiting, an attacker could in principle send repeated token guesses against a known username and use the timing differences to attempt to recover a valid token, though the vendor rates the practical exploitability as low and no end-to-end network exploit has been demonstrated.
Published: 2026-08-25
Score: 8.7 High
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Grav Composer plugin login implementation before version 3.9.1 compares password reset and account activation tokens with a simple string equality check that is not constant‑time. That leaves a distinguishable timing side channel that an attacker can use to infer the correct token. Exploiting this flaw could allow an adversary to recover a valid token for a known username, compromising the ability to reset a password or activate an account. The weakness is categorized as CWE‑208.

Affected Systems

The vulnerability affects the Grav CMS project, specifically the getgrav:grav-plugin-login Composer plugin shipped with Grav before version 3.9.1. Versions 3.9.1 and newer contain the patch that replaces the fragile comparison with a secure hash_equals() call.

Risk and Exploitability

The CVSS score for this issue is 8.7, indicating a high severity level. The EPSS score is not available, so the overall exploitation probability is uncertain, but the flaw is not listed in the CISA KEV catalog. The exploitation path uses the public token‑submission endpoint (taskReset) which is also unrate‑limited, so an attacker could send repeated guesses and measure response times to converge on a valid token. Vendors rate the practical exploitability as low and have not demonstrated a complete network‑level attack. Nonetheless, the presence of the timing side‑channel and lack of throttling means that a skilled attacker could potentially recover a token in a real attack scenario.

Generated by OpenCVE AI on August 25, 2026 at 03:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Grav to version 3.9.1 or later to replace the insecure token comparison with a constant‑time hash_equals() function.
  • Implement rate limiting or an account lockout policy on the token reset endpoint to reduce the effect of timing measurements.
  • If an upgrade cannot be performed immediately, consider disabling or limiting access to the token reset endpoint until the patch is applied.

Generated by OpenCVE AI on August 25, 2026 at 03:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 25 Aug 2026 02:00:00 +0000

Type Values Removed Values Added
Description The getgrav/grav-plugin-login Composer plugin before 3.9.1 (used by Grav) compares password reset and account activation tokens using a non-constant-time === string comparison instead of hash_equals() in classes/Controller.php (taskReset()) and login.php (activation handler). Because the token-submission endpoint (taskReset) also lacks rate limiting, an attacker could in principle send repeated token guesses against a known username and use the timing differences to attempt to recover a valid token, though the vendor rates the practical exploitability as low and no end-to-end network exploit has been demonstrated.
Title Grav before 3.9.1 Timing Attack via Non-Constant-Time Token Comparison
First Time appeared Getgrav
Getgrav grav
Weaknesses CWE-208
CPEs cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:*
Vendors & Products Getgrav
Getgrav grav
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N'}

cvssV4_0

{'score': 8.7, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-08-25T01:30:22.914Z

Reserved: 2026-08-10T13:02:20.829Z

Link: CVE-2026-72700

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-25T02:16:45.830

Modified: 2026-08-25T02:16:45.830

Link: CVE-2026-72700

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-25T03:30:05Z

Weaknesses
  • CWE-208

    Observable Timing Discrepancy