Root Cause: The matchRewards function in LikeRegistry sends ETH to a newly deployed MultiSigWallet contract. A malicious user could create a contract that mimics the MultiSigWallet and, in its receive() function, calls back to the LikeRegistry's likeUser function. This would allow them to repeatedly drain the userBalances of other users before the original matchRewards transaction completes.
Impact: Loss of user funds. A malicious user could steal all the ETH accumulated in userBalances.
Recommendation: Implement a reentrancy guard in matchRewards. This can be done using a mutex or a check-effect-interaction pattern. For example:
matchRewards: Contract is created just before and is the one called. No impact. executeTransaction: CEI is followed. Emitting an event in disorder is informational in that context. withdraw: CEI is followed.
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.