The faucet should drip Sepolia ETH to first-time claimers while respecting a daily ETH cap (dailySepEthCap). The cumulative amount dripped in a day (dailyDrips) must never exceed this cap.
In the else path (i.e., when the caller is not a first-time claimer or drips are paused), the code resets the global dailyDrips to 0. This lets any caller who already claimed ETH (or when drips are paused) erase the daily usage, enabling subsequent first-time claimers to receive ETH beyond the intended daily cap.
Likelihood:
During any call by a non-first-time claimer (or when drips are paused), execution reaches the else branch, which always resets dailyDrips to zero.
After such a reset, the next first-time claimer(s) within the same day will receive ETH as if no ETH had been dripped, breaching the daily cap.
Impact:
Exceeds daily ETH cap: The faucet distributes more ETH per day than configured, breaking operator assumptions and accounting.
Abuse amplification: An attacker (or just many returning users) can repeatedly trigger resets to allow unbounded daily distribution to new claimers.
The PoC configures a small drip (0.01) and small daily cap (0.02). Two first-time claimers (user1, user2) legitimately consume the entire daily cap (total 0.02). Then, a non-first-time claimer (user1 again) calls claimFaucetTokens(), hitting the else { dailyDrips = 0; } branch and resetting the counter. A third first-time claimer (user3) then receives ETH despite the cap already being reached. The final assertion confirms total dripped ETH exceeds the daily cap.
Reset dailyDrips only at the day boundary, not on the non-eligible path. Remove the unconditional reset and centralize daily resets under a single “day” clock.
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.