Normally, burnFaucetTokens(amountToBurn) should transfer only the number of tokens that will be burned (amountToBurn) from the faucet contract to the caller (owner), and then burn that amountToBurn, leaving the remaining faucet tokens in the contract.
The issue is that the implementation transfers the contract's entire token balance to the caller before burning only amountToBurn. This causes the faucet to lose all tokens while only a portion is burned.
Likelihood:
Occurs when the owner calls burnFaucetTokens(amountToBurn) while the contract holds a token balance greater than amountToBurn.
Happens any time the owner executes the burn function for maintenance or supply management while tokens remain in the faucet contract.
Impact:
The faucet contract is drained of all its tokens, while only amountToBurn tokens are actually burned—owner receives the remaining tokens.
Allows the owner to unintentionally (or maliciously) appropriate leftover faucet tokens, breaking expected token distribution and trust assumptions.
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.