checkList to set first check status.Issue: checkList() function at line SantasList.sol:Lxx is missing onlySanta modifier, allowing ANY external address to set s_theListCheckedOnce[person] for any person. This breaks the core invariant that Santa is the sole authority for the naughty/nice list.
This allows attacker to front-run and poison the mapping, causing Santa's subsequent checkTwice to revert if status mismatches, leading to DoS of legitimate NICE users.
// Root cause
// File: src/SantasList.sol
function checkList(address person, Status status) external {
@> s_theListCheckedOnce[person] = status;
emit CheckedOnce(person, status);
}
Likelihood:High - Likelihood: High - The function is public/external with no access control. Any EOA or contract can call it at any time with zero cost, easily front-running Santa. No privileges required.
Impact:High -Breaks core protocol functionality. Attacker can mark any victim as NAUGHTY before Santa checks. When Santa later tries to mark same victim as NICE, checkTwice will revert due to status mismatch check. This prevents NICE users from ever collecting presents (collectPresent requires NICE twice). This is permanent DoS and breaks Santa's list integrity.
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.