QuickCourt reset-code takeover
A padel and tennis court booking site. The reset code is derived from the send time, with no rate limit.
0 solves
Small mistakes in login, reset and session handling that individually look harmless and add up to account takeover.
Authentication and session handling accumulate small design mistakes that each look harmless in isolation: a reset code that is short but "impossible to guess fast enough," a signing key that is technically secret but shipped to the browser anyway.
$code = str_pad(crc32((string) time()) % 1000000, 6, '0', STR_PAD_LEFT); mail($user->email, 'Your reset code', $code);
A code derived from a predictable value, like the current timestamp, is not random no matter how it looks. With no rate limit, even a genuinely random six-digit code is only a million requests away.
Account takeover, directly, with no phishing or malware required.
A padel and tennis court booking site. The reset code is derived from the send time, with no rate limit.
0 solves
A physical-therapy appointment portal. The "remember me" cookie is XORed with a key the client-side JS also ships.
0 solves