The Snow::buySnow
function contains a critical flaw where it resets a global timer (s_earnTimer)
to the current block timestamp on every invocation. This timer controls eligibility for free token claims via Snow::earnSnow()
, which requires 1 week to pass since the last timer reset. As a result:
Any token purchase (via buySnow)
blocks all free claims for all users for 7 days
Malicious actors can permanently suppress free claims with micro-transactions
Contradicts protocol documentation promising "free weekly claims per user"
Complete Denial-of-Service: Free claim mechanism becomes unusable
Broken Protocol Incentives: Undermines core user acquisition strategy
Economic Damage: Eliminates promised free distribution channel
Reputation Harm: Users perceive protocol as dishonest
Likelihood:
• Triggered by normal protocol usage (any purchase)
• Requires only one transaction every 7 days to maintain blockage
• Incentivized attack (low-cost disruption)
Impact:
• Permanent suppression of core protocol feature
• Loss of user trust and adoption
• Violates documented tokenomics
Attack Scenario: Permanent Free Claim Suppression
Attacker calls buySnow(1) with minimum payment
s_earnTimer sets to current timestamp (T0)
All earnSnow() calls revert for next 7 days
On day 6, attacker repeats buySnow(1)
New timer reset (T1 = T0+6 days)
Free claims blocked until T1+7 days (total 13 days)
Repeat step 4 every 6 days → permanent blockage
Test Case:
Step 1: Remove Global Timer Reset from buySnow
Step 2: Implement Per-User Timer in earnSnow
Step 3: Initialize First Claim (Constructor)
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.
The contest is complete and the rewards are being distributed.