Beginner FriendlyFoundry
100 EXP
View results
Submission Details
Severity: high
Valid

Malicious user can call `SantasList::checkList`

Summary

Anyone can call SantasList::checkList function because lack of access control

Vulnerability Details

In SantasList::checkList, this should only be called by santa but anyone can call and set them in s_theListCheckedOnce because of lose access control

//Here is the POC

function test_anyoneCanCallCheckList() public {
//user is calling instead of santa
vm.prank(user);
santasList.checkList(user, SantasList.Status.NICE);
assertEq(uint256(santasList.getNaughtyOrNiceOnce(user)), uint256(SantasList.Status.NICE));
}

Impact

Malicious actor can set himself in s_theListCheckedOnce

Tools Used

  • Manual review

Recommendations

Use onlySanta modifier in SantasList::checkList

- function checkList(address person, Status status) external{
s_theListCheckedOnce[person] = status;
emit CheckedOnce(person, status);
}
+ function checkList(address person, Status status) external onlySanta{
s_theListCheckedOnce[person] = status;
emit CheckedOnce(person, status);
}
Updates

Lead Judging Commences

inallhonesty Lead Judge over 1 year ago
Submission Judgement Published
Validated
Assigned finding tags:

Access Control on checkList()

Anyone is able to call checkList() changing the status of a provided address. This is not intended functionality and is meant to be callable by only Santa.

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.