Grav CMS versions before 2.0.16 have a timing vulnerability in the Utils::verifyNonce() function used for CSRF protection. The vulnerability arises because the nonce comparison uses a non-constant-time string comparison operator (===) instead of a constant-time function like hash_equals(). This allows attackers to measure timing differences in responses to recover valid nonce values byte-by-byte, weakening the effectiveness of CSRF protection.