There are multiple instances of unsafe ERC20 transfers which could lead to stakers losing their rewards.
Although SafeERC20 library is imported in LiquidationPool and used for transferFrom, it is not used for transfer and the value from the transfer is not checked. If the transfer of ERC20 tokens fails (for example if it returns false), the protocol wouldn't know and will assume that everything is fine. If we look at LiquidationPool::claimRewards, we can see that we delete the rewards mapping before the transfer so if the transfer fails the user loses his rewards.
EIP20 states that the value returned from transfer should always be checked:
Callers MUST handle
falsefromreturns (bool success). Callers MUST NOT assume thatfalseis never returned!
Leads to loss of rewards for users if the transfer of tokens fails
Manual Review
Use the SafeERC20 library for transfer as well. More precisely the safeTransfer 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.