burnFaucetTokens transfers the entire faucet balance to the owner before burning only the requested amount, allowing total token extraction.
The intended flow lets the owner burn a caller-specified quantity of faucet tokens to reduce supply while keeping unburnt tokens in the contract.
Instead, the function transfers balanceOf(address(this)) to the owner account and burns only amountToBurn, so any burn request becomes a full withdrawal exploit.
Likelihood:
The issue is triggered whenever the owner calls burnFaucetTokens, a maintenance action that is expected to happen repeatedly as supply is managed.
Automated treasury management scripts that periodically burn tokens will unknowingly siphon the entire faucet balance to the owner wallet.
Impact:
A malicious or compromised owner can drain all faucet liquidity instantly and never burn the transferred tokens.
Users lose confidence because the faucet supply is no longer controlled, destroying the economic integrity of the token drop.
Calling burnFaucetTokens with a small amount reveals that the owner wallet still receives the contract's full balance before only burning the requested slice.
This one-line fix limits the transfer to amountToBurn, stopping the owner from siphoning the entire faucet balance when burning tokens.
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.