Competitive Audits
First Flights
Leaderboard
Docs
Toggle theme
Sign up
Log in
All First Flights
Santa's List
Submissions
AI First Flight
Santa's List
AI First Flight #3
Beginner Friendly
Foundry
EXP
AI First Flight
EXP
Oct 10th, 2026 → Oct 12th, 2026
View repo
View results
8 / 8
Submissions
Severity
Validity
Tags
Author
#1
buyPresent burns SantaToken from a caller-chosen presentReceiver with no allowance check and mints the NFT to msg.sender, so anyone can destroy any holder's SantaToken and receive a free NFT
High
Valid
[H-03] SantasList::buyPrese...
friedsocks233
#2
collectPresent's one-per-address guard is balanceOf(msg.sender) > 0, so moving the NFT out (by transfer, or re-entrantly from onERC721Received) lets one address collect without limit and mint unlimited NFTs and SantaToken
High
Valid
[H-04] Any `NICE` or `EXTRA...
friedsocks233
#3
Status.NICE is enum value 0 (the mapping default), so every address Santa never checked passes collectPresent as NICE/NICE and mints the NFT, removing the eligibility gate for the NICE tier
High
Valid
[H-02] All addresses are co...
friedsocks233
#4
checkList has no onlySanta modifier, so anyone can rewrite any address's first-list status to deny eligible users their present, block Santa's checkTwice, and override a first-pass NAUGHTY verdict
High
Valid
[H-01] Anyone is able to ca...
friedsocks233
#5
SantaToken inherits a backdoored "solmate" ERC20 (foundry.toml remaps @solmate to lib/solmate-bad) whose transferFrom lets hardcoded address 0x815F577F1c1bcE213c012f166744937C889DAF17 move any holder's SantaToken without allowance
High
Valid
[H-05] Malicious Code Injec...
friedsocks233
#6
buyPresent burns 1e18 SantaToken instead of the documented 2e18 because PURCHASED_PRESENT_COST is never used and SantaToken.burn hardcodes 1e18, so every present sells at half the specified price
Medium
Valid
[M-01] Cost to buy NFT via ...
friedsocks233
#7
buyPresent mints the purchased NFT to msg.sender instead of presentReceiver, so a present bought for a friend never reaches the friend and the buyer must forward it manually
High
Valid
[H-03] SantasList::buyPrese...
friedsocks233
#8
tokenURI is overridden as pure and drops OpenZeppelin's _requireOwned check, so it returns Santa NFT metadata for token ids that do not exist (ERC-721 Metadata non-compliance)
Low
Invalid
friedsocks233
Previous
1
Next
Support
FAQs
Can't find an answer? Chat with us on Discord, Twitter or Linkedin.
What is Cyfrin CodeHawks?
What is a competitive audit?
How can I host a competition on CodeHawks?
How is a contest prize pool determined?
How do I get rewarded?
What is a First Flight?
Give us feedback!