buyPresent can be called to trade 1e18 of SantaToken for an NFT according to the actual code.
buyPresent() functions takes one parameter which is presentReceiver. The function can be called by anyone and it burns 1e18 SantaToken from whoever the presentReceiver is.
So anyone can call the buyPresent() function and burns some other user's SantaToken and mints himself an NFT.
manual code review
foundry
If the buyPresent() function should work according to the explanation in the contest documents i.e. to trade tokens with NFTs
in that case the recommendation can be to remove the presentReceiver argument from the buyPresent() function and add msg.sender as an argument to burn function like below:
Current implementation allows a malicious actor to burn someone else's tokens as the burn function doesn't actually check for approvals.
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.