Description: The Snow contract uses a single global timer s_earnTimer
that is reset whenever any user calls buySnow()
or earnSnow()
. This allows a malicious actor to continuously reset the timer, preventing all other users from ever claiming their weekly free tokens.
An attacker can exploit this by:
Waiting until legitimate users are about to claim (6 days + 23 hours)
Calling buySnow()
to reset the global timer
Repeating this process indefinitely to maintain permanent DoS
Impact: Complete denial of service for free token distribution, breaking core protocol functionality.
Proof of Concept:
Recommended Mitigation: Replace global timer with per-user timers:
When buySnow is successfully called, the global timer is reset. This inadvertently affects the earning of snow as that particular action also depends on the global timer.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.