In this case, _claimedBy” is never set to true, so the claimant can issue call the function multiple times. msg.senderdoes not have adequate restrictions. So ,claim` function can be called called multiples times by the soulmates and it can ruin its functionality.
Airdrop contract define aclaim() function that is protected by a _claimedBy
However, In the above case, the modifier implementation is flawed as there isn’t any check for a require or revert,
the comparison will silently return false and let the execution continue:
Any account can claim tokens, any number of Lovetokens.
This represents a critical issue as the Soulmate NFT token can be used to claim 1 LoveToken per day. An attacker can freely claim Lovetokens to steal all the rewards from it.
Manual Review
The modifier should require that the caller is the _claimedBy in order to revert the call in case this condition doesn’t hold.
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.