The claimFaucetTokens()
function tracks the amount of Sepolia ETH dripped per day using dailyDrips
and enforces a per‑day cap dailySepEthCap
for first‑time claimers.
However, when a claimer is not eligible for ETH (e.g., not a first‑timer or drips are paused), the code resets dailyDrips
to 0 in the else
branch. This allows any non‑first‑time claimer to zero the daily accounting, enabling additional first‑time claimers to receive ETH the same day and effectively bypassing the daily ETH cap.
This logic should not reset the daily accounting when no ETH is dripped. dailyDrips
should only reset when the day changes.
Likelihood: High
Any non‑first‑time claimer can perform a regular claim at any time during the day to reset dailyDrips
to 0
No special timing is required beyond being able to call claimFaucetTokens()
Deterministic and repeatable within the same day
Impact: High
Bypasses the daily ETH distribution cap, causing the contract to distribute more ETH than intended
Enables repeated ETH drains within the same day by alternating between non‑first‑time claimers (to reset) and new first‑time claimers (to receive ETH)
Breaks fairness and budget assumptions of the faucet
The following test demonstrates the bypass with a daily cap equal to exactly one drip. After one first‑time claimer consumes the daily cap, a non‑first‑time claimer resets dailyDrips
to 0, allowing another first‑time claimer to receive ETH again on the same day.
To run just this test:
Remove the erroneous reset and reset dailyDrips
only when the day changes.
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.