Expected behavior:
The faucet should follow the Checks-Effects-Interactions pattern to prevent reentrancy, ensuring token and ETH transfers are executed after all state updates.
Actual behavior:
The contract updates state variables and performs ETH and token transfers in ways that may allow reentrant re-entry via fallback calls.
Explanation:
The call used to transfer ETH to faucetClaimer can trigger a fallback function on the recipient, which may call claimFaucetTokens() again before lastClaimTime and hasClaimedEth are finalized.
Likelihood
High — this can be executed easily if a claimer is a contract with a fallback function.
Impact:
Allows malicious claimers to repeatedly reenter claimFaucetTokens() and drain ETH.
Compromises the faucet’s ETH and token reserves.
Explanation
The fallback re-calls the faucet’s claim function during ETH transfer, draining its balance before the function completes.
Explanation
Using transfer() or a reentrancy guard prevents recursive calls.
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.