Root + Impact
The SantaToken.burn() function only checks that the caller is i_santasList. It does NOT check any ERC20 allowance or that the from address has approved the burn.
Combined with the buyPresent() bug (Finding #2), this means SantasList can burn tokens from any address without any approval mechanism. Even if buyPresent() were fixed to burn from msg.sender, the burn() function itself lacks the fundamental ERC20 safety of requiring allowance.
The NatSpec on buyPresent() says "You'll first need to approve the SantasList contract to spend your SantaTokens" — but no approval is ever checked anywhere. The burn() ignores all allowances.
Likelihood:
The burn path is directly triggered via buyPresent(), which is callable by anyone
No approval or consent is required from the token holder
Impact:
Directly enables Finding #2: any attacker can burn any user's SantaTokens
Violates the ERC20 allowance model — the approve mentioned in the NatSpec is never enforced
Any future function added to SantasList that calls burn() inherits this vulnerability
Add an allowance check in the burn function, or restructure buyPresent() to use transferFrom with the standard allowance pattern:
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.