Junglewise Threat Intelligence

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

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

Executive brief

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.

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

Related threats