buySnow() is designed to let users purchase SNOW tokens by paying either exact ETH or WETH equal to s_buyFee * amount.
When a user sends ETH that does not exactly match the required amount, the contract silently retains the sent ETH without refunding it, then also pulls the full cost in WETH from the user — resulting in the user being charged twice and permanently losing their ETH.
Likelihood: High
Any user sending a slightly incorrect ETH amount due to fee estimation errors, UI rounding, or decimal mistakes triggers the double charge automatically
The condition msg.value == exact amount has zero tolerance — partial ETH sends are common in real usage and all of them hit this bug
Impact: High
Users permanently lose their sent ETH — it is never refunded and is later swept by collectFee() to the collector
Users are double-charged, losing sent ETH AND having full WETH amount pulled, paying up to 2x the intended price for their tokens
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.