The burnFaucetTokens() function is intended to burn tokens from the faucet contract’s balance. Instead, it transfers the entire faucet balance to the owner and burns only amountToBurn from the owner’s balance. This allows the owner (or any party that gains ownership) to effectively steal the remaining faucet tokens while appearing to perform a burn.
Example scenario:
Faucet holds 1,000 tokens.
Owner calls burnFaucetTokens(100).
Faucet sends all 1,000 tokens to the owner.
Owner burns 100 tokens.
Owner keeps 900 tokens.
This completely breaks the faucet’s tokenomics and allows arbitrary token theft.
Likelihood:
The function is onlyOwner, so any compromised or malicious owner can abuse it directly.
No safeguards exist to restrict the transfer to only amountToBurn.
Impact:
Owner can drain all faucet tokens instantly.
The faucet becomes non-functional since no tokens remain for claimers.
Tokenomics are effectively broken — the faucet loses its distribution mechanism.
Burn directly from the contract’s balance instead of transferring first.
No token transfer to the owner should occur in a burn routine.
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.