burnFaucetTokens() function transfers the entire contract token balance to the owner before burning, causing the contract balance to become 0 and breaking the faucet logic if a person tries to claim tokens from faucet.burnFaucetTokens(uint256 amountToBurn) should allow the owner to burn a specific number of faucet tokens while keeping the remaining tokens in the contract available for users to claim.
Currently, the function transfers the entire contract balance to the owner before burning, even if only a fraction of tokens is intended to be burned. This sets the contract balance to 0, causing subsequent user claims to fail and breaking the faucet’s core functionality.
Likelihood:
Occurs whenever the owner tries to burn any portion of the faucet tokens while leaving some tokens in the contract.
Likely in normal faucet management operations.
Impact:
Users cannot claim faucet tokens, breaking the core functionality.
May cause temporary disruption in token distribution and user experience.
Could lead to loss of trust in the contract if claims fail unexpectedly.
This PoC demonstrates that when owner call burnFaucetTokens() all the balance is send to the owner's address and when a llegitimate user tries to claim tokens from the contract he/she isn't able to.
Well there can be 2 mitigations and you can choose either one
Burn the tokens from the contract itself
Send only the amountToBurn() to the owner's address
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.