Delayed cooldown updates leave claimFaucetTokens vulnerable to reentrancy that bypasses daily rate limits and cooldown enforcement.
In normal operation the faucet should mark the caller’s lastClaimTime and increment dailyClaimCount before any external interaction so cooldown checks immediately reflect the new claim.
The function currently performs the ETH drip first, then updates lastClaimTime and dailyClaimCount, so a re-entering contract sees stale counters and passes the cooldown guard multiple times in one transaction.
Likelihood:
Whenever the claimer is a contract with a payable fallback, the fallback can recursively call claimFaucetTokens before lastClaimTime mutates.
Flash-bot adversaries monitor the mempool for faucet claims and sandwich them with crafted contracts that immediately re-enter upon receiving the drip.
Impact:
Cooldown bypass allows the attacker to drain a disproportionate share of ETH drips in a single block.
Daily claim quotas lose integrity, enabling either permanent DoS for honest users or inflation of faucet token distribution.
The PoC shows a contract that re-enters during the ETH callback before lastClaimTime is written, so each loop passes the cooldown guard.
Adopting this patch ensures lastClaimTime and dailyClaimCount update before the transfer, keeping cooldown checks effective during callbacks.
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.