Under normal behavior, the dailyDrips The counter should continuously track how much Sepolia ETH has been distributed each day and only reset once per 24-hour cycle. This ensures the faucet cannot exceed its dailySepEthCap.
The issue is that dailyDrips is incorrectly reset to 0 inside the else block whenever a user who has already claimed ETH calls claimFaucetTokens() again. This allows attackers to repeatedly reset the daily counter and drain all ETH from the faucet.
This line effectively bypasses the faucet’s daily ETH distribution cap, allowing malicious users to claim unlimited ETH using alternating addresses.
Likelihood:
Can be triggered by any previously claimed address making a call — no special permissions or timing required.
Attack can be automated with simple alternating calls from two or more wallets.
Impact:
Daily ETH limit (dailySepEthCap) becomes meaningless, since it is repeatedly reset.
The faucet’s ETH balance can be fully drained in a short time.
Fix dailyDrips reset: only reset at a real day rollover, don’t reset on any claim.
Use per-user tracking: hasClaimedEth[user] + lastClaimTime[user] to enforce cooldown.
NonReentrant + effects-before-interactions: update state before sending ETH.
Optional: prevent contract calls (require(msg.sender == tx.origin)).
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.