The claimFaucetTokens() function resets dailyDrips to 0 inside the else branch that runs when a user has already claimed ETH before or when Sepolia drips are paused.
This means any returning user can trigger a full reset of the daily distribution counter, effectively turning what should be a global daily ETH cap into a per-user cap.
As a result, multiple users (or one attacker using multiple addresses) can each reset the counter and drain more ETH per day than intended.
Likelihood:
The vulnerable else branch executes for every returning claimer or when drips are paused.
No date check (currentDay != lastDripDay) is performed before resetting.
Impact:
Bypasses the intended global daily ETH cap (dailySepEthCap).
Multiple users can drain more ETH than the system’s intended daily limit.
Faucet accounting and emission limits become meaningless.
When the faucet contract is vulnerable (resets per user or pause), the test will fail — because dailyDrips was reset to 0 improperly.
This output means:
Actual: dailyDrips = 1e16 (not reset)
Expected: dailyDrips = 0
So the faucet incorrectly reset (or didn’t behave as intended).
Ensure dailyDrips is reset only once per new day, not when a returning user claims or when drips are paused.
Use a day-based comparison (block.timestamp / 1 days) to detect when a new day begins.
This ensures the daily ETH cap is enforced globally, preventing each user from resetting the counter and bypassing the limit.
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.