When a soulmate is divorced and still tries to claim the airdrop, he will succeed because Airdrop::claim
will never revert.
When a soulmate is divorced and still tries to claim the airdrop, he will succeed because Airdrop::claim
will never revert throwing Airdrop::Airdrop__CoupleIsDivorced
error because Soulmate::isDivorced
function will always return false because in this case msg.sender
will always be Airdrop.sol
.
Airdrop.sol:
https://github.com/Cyfrin/2024-02-soulmate/blob/b3f9227942ffd5c443ce6bccaa980fea0304c38f/src/Airdrop.sol#L53
Soulmate.sol:
https://github.com/Cyfrin/2024-02-soulmate/blob/b3f9227942ffd5c443ce6bccaa980fea0304c38f/src/Soulmate.sol#L131C5-L133C6
The soulmates who decide to get divorced and still after getting divorced tries to claim the pending airdrop tokens, they will be able to do that because the intended check is implemented incorrectly.
Manual Review
In Airdrop::claim
function, msg.sender
should be passed as an argument to Soulmate::isDivorced
function. In Soulmate::isDivorced
function, the provided soulmate should be checked in Soulmate::divorced
mapping for the status.
Airdrop.sol
Soulmate.sol
High severity, This issue is separated from the flawed `isDivorced()` check presented in issue #168 as even if that is fixed, if ownership is not checked, isDivorced would still default to false and allow bypass to claim airdrops by posing as tokenId 0 in turn resulting in this [important check for token claim is bypassed.](https://github.com/Cyfrin/2024-02-soulmate/blob/b3f9227942ffd5c443ce6bccaa980fea0304c38f/src/Airdrop.sol#L61-L66). #220 is the most comprehensive issue as it correctly recognizes both issues existing within the same function.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.