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.