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

claim() does not revert when couples are divorced

Summary

claim() function should revert if the soulmates are divorced.

Vulnerability Details

claim() function has following check in order to avoid divorced couples to claim tokens:

if (soulmateContract.isDivorced()) {revert Airdrop__CoupleIsDivorced();}

Impact

But the if statement does't work as expected and the divorced couples can call claim() function.
Below PoC can be used to prove:

function test_divorcedCannotClaimAirdrop() public {
_mintOneTokenForBothSoulmates();
vm.warp(block.timestamp + 200 days + 1 seconds);
vm.startPrank(soulmate1);
soulmateContract.getDivorced();
assertEq(soulmateContract.isDivorced(), true);
airdropContract.claim();
assertTrue(loveToken.balanceOf(soulmate1) == 200 ether);
vm.stopPrank();
vm.startPrank(soulmate2);
assertEq(soulmateContract.isDivorced(), true);
airdropContract.claim();
assertTrue(loveToken.balanceOf(soulmate2) == 200 ether);
vm.stopPrank();
}

Tools Used

Manual review

Recommendations

The claim() and the isDivorced() functions should be changed as below in order to revert the claim function when the couples are divorced.

Below should be added to claim() function:
if (soulmateContract.isDivorced(msg.sender)) {revert Airdrop__CoupleIsDivorced();}

isDivorced() function should be updated as below:
function isDivorced(address owner) public view returns (bool) {return divorced[owner];}

Updates

Lead Judging Commences

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

finding-isDivorced-wrong-check

Support

FAQs

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