Beginner FriendlyDeFiFoundry
100 EXP
View results
Submission Details
Severity: medium
Valid

Insecure access control in `Laundrette::quitTheGang` function, causing any `gangmember` can quit other gangmembers

Description

The function Laundrette::quitTheGang allows an external caller to revoke anyone's gangmember role, as long as the caller is a gangmember.

Impact

The gangmember can be revoked unvoluntarily or accidentally by someone else. The user will then lose the privileges as a gangmember, including withdrawMoney, takeGuns, etc.

Proof of Concept

function test_quitGangOthers() public {
address alice = makeAddr("alice");
joinGangGodFather();
joinGang(address(this));
assertEq(kernel.hasRole(address(this), Role.wrap("gangmember")), true);
joinGang(alice);
assertEq(kernel.hasRole(address(this), Role.wrap("gangmember")), true);
vm.prank(alice);
laundrette.quitTheGang(address(this));
assertEq(kernel.hasRole(address(this), Role.wrap("gangmember")), false);
}

Recommendations

  • add isAuthorizedOrRevert(account) modifier to function Laundrette::quitTheGang, so that only GodFather or the user itself can revoke its own gangmember role

Updates

Lead Judging Commences

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

Gang members ban other members

Support

FAQs

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