claimFaucetTokens() performs external calls and internal transfers without nonReentrant or reentrancy checks.
Expected behavior:
Critical functions like claimFaucetTokens() and burnFaucetTokens() should include reentrancy protection.
Actual behavior:
Multiple functions can be reentered due to use of low-level call and balance changes before external transfers.
Likelihood:
High — common in faucets and token contracts if not protected.
IMPACT:
Allows recursive calls to claimFaucetTokens() that can mint or transfer tokens multiple times.
Proof of Concept:
an attacker can reenter through fallback.
Explanation
The fallback re-calls the faucet’s claim function during ETH transfer, draining its balance before the function completes.
Recommended mitigation:
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.