CVE-2026-72700: Grav before 3.9.1 Timing Attack via Non-Constant-Time Token Comparison

Published Aug 25, 2026
·
Updated

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 hashequals() 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.

Affected Software

2 affected components
Grav Grav<3.9.1
composer/getgrav/grav-plugin-login<3.9.1

Event History

Aug 25, 2026
CVE Published
via MITRE·01:30 AM
Data Sourced
via MITRE·01:30 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·02:16 AM
DescriptionSeverityWeakness

Frequently Asked Questions

1

What conditions would an attacker need to exploit this issue?

An attacker would need a known username and the ability to repeatedly submit password-reset token guesses to the taskReset endpoint. Exploitation relies on measuring timing differences from token comparisons to try to recover a valid token.

2

Is this known to be practically exploitable over the network?

The vendor rates practical exploitability as low, and no end-to-end network exploit has been demonstrated. The issue is nevertheless network-reachable and requires no authenticated access or user interaction according to the provided vector.

3

What makes repeated guessing feasible in the affected reset flow?

The taskReset token-submission endpoint lacks rate limiting. This permits repeated token guesses, which are needed to attempt a timing-based recovery attack.

4

How can I determine whether my deployment is affected?

Check whether Grav uses the composer/getgrav/grav-plugin-login plugin before version 3.9.1. Affected code paths are the password-reset handler in classes/Controller.php (taskReset()) and the account-activation handler in login.php.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203