Description: External faucetClaimer.call{value: ...}("") is executed while important state (e.g., lastClaimTime, dailyClaimCount, dailyDrips, hasClaimedEth) is not guaranteed to be finalized. No ReentrancyGuard is used.
Impact: High — a malicious contract can re-enter claimFaucetTokens() during the ETH call to bypass cooldowns and claim tokens/ETH multiple times, draining funds.
Proof of Concept:
Test steps (Hardhat/ethers):
Deploy target and fund with tokens + ETH.
Deploy Attacker.
From attacker, call attack().
Observe multiple successful claims and drained tokens/ETH.
Recommended Mitigation: Reorder: Checks → Effects → Interactions; update all state (lastClaimTime, dailyClaimCount, hasClaimedEth, dailyDrips) before any external call.
Add nonReentrant (OpenZeppelin ReentrancyGuard) to claimFaucetTokens().
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.