Description:
If the caller is not a first‑time claimer (i.e., hasClaimedEth[caller] == true) or drips are paused, the function executes else { dailyDrips = 0; }. This resets the daily ETH counter at any time, not only when the day rolls over. An attacker can:
Use a first‑time address A to receive ETH;
Call again with A to force dailyDrips = 0;
Use a new first‑time address B to get more ETH, repeating to bypass the per‑day cap.
Impact:
Unlimited first‑time ETH payouts per calendar day (bounded only by contract ETH), violating dailySepEthCap.
Practical drain of donated/refilled ETH via sybil addresses with trivial orchestration.
Proof of Concept:
Mitigation:
Remove else { dailyDrips = 0; }. Only reset dailyDrips when the day rolls (e.g., when currentDay > lastDripDay).
Consider anchoring daily resets to a consistent day boundary (e.g., currentDay = block.timestamp / 1 days).
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.