# CVE-2026-72700: Grav login plugin timing attack in password reset and activation tokens

Source: https://junglewise.ai/threats/cve-2026-72700-grav-login-plugin-timing-attack-in-password-reset-and-activation  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-08-25. Updated: 2026-09-25  
License: CC BY 4.0 with a link back

CVE-2026-72700 · Severity: high · CVSS 7.5 · Published 2026-08-25

Grav's login plugin uses insecure string comparison for password reset and account activation tokens, allowing an attacker to use timing analysis to guess valid tokens. Combined with a lack of rate limiting on the token submission endpoint, an attacker could potentially recover tokens and take over accounts by setting new passwords or activating unauthorized accounts. While the vendor rates practical exploitability as low and no working network exploit has been demonstrated, the vulnerability affects all versions before 3.9.1.

Vendors: [Grav](https://junglewise.ai/threats/vendors/grav).

## Quick answers

**Is CVE-2026-72700 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-72700 being exploited in the wild.

**How severe is CVE-2026-72700?** High severity, with a CVSS score of 7.5, published 25 August 2026.

**Which products and versions are affected?** Grav-Plugin-Login < 3.9.1.

**Is there a fix for CVE-2026-72700?** A patch was published on 2026-08-25: Version 3.9.1 released with fix Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-72700 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-72700?** Check whether you run Grav-Plugin-Login at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## Technical details

The vulnerability is a timing attack (CWE-208) in the getgrav/grav-plugin-login Composer plugin. The vulnerable code in classes/Controller.php (taskReset()) and login.php (activation handler) compares user-supplied tokens against stored tokens using PHP's === operator instead of the constant-time hash_equals() function. This allows attackers to differentiate between incorrect and partially-correct tokens based on response timing. The plugin lacks rate limiting on the token submission endpoint (taskReset), enabling repeated guesses. Measurements show a ~4.3% timing variance between incorrect tokens and correct first-31-character matches. While the per-request timing signal is weak relative to typical network jitter, unlimited submission attempts could overcome this noise through statistical sampling. The fix, already applied in version 3.9.1, is to replace === with hash_equals() and add rate limiting to the token verification step.

## Affected products

- Grav grav-plugin-login < 3.9.1

## Timeline

- 2026-08-25: disclosed
- 2026-08-25: patched: Version 3.9.1 released with fix

## References

- [https://github.com/getgrav/grav/security/advisories/GHSA-x239-6jqx-5hjh](https://github.com/getgrav/grav/security/advisories/GHSA-x239-6jqx-5hjh)
- [https://www.vulncheck.com/advisories/grav-before-timing-attack-via-non-constant-time-token-comparison](https://www.vulncheck.com/advisories/grav-before-timing-attack-via-non-constant-time-token-comparison)

## Related threats

- [Grav API Plugin authorization bypass in user-management guards](https://junglewise.ai/threats/cve-2026-86193-grav-api-plugin-authorization-bypass-in-user-management-guards)
