The claimAllRewards and claimSingleReward functions are both susceptible to a reentrancy attack.
Within both functions when a user claims, the value is sent to them via call() before the user's rewardsOwned state has been updated. If the claimer is a smart contract it can recursively reenter the function via fallback() or recieve().
This will allow the caller to deplete the contract of its entire token balance.
Manual Review
Use the check-effects-interactions pattern or the nonReentract modifier.
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.