Incorrect CrvUSD balance checking in StabilityPool for liquidation.
StabilityPool owner or manager can call liquidateBorrower() to liquidate a borrower's position.
This function will first check if StabilityPool has sufficient CrvUSD balance, or the transaction will revert.
The checking is as below:
StabilityPool::liquidateBorrower()
userDebt is retrieved from LendingPool, the value is compounded:
However, userDebt is compounded again:
Then protocol wrongly compares StabilityPool CrvUSD balance with the double-compounded value.
Moreover, LendingPool's updateState() is not called before getting user debt, and userDebt value might be wrong.
By comparing StabilityPool CrvUSD balance with the double-compounded value, it needs more CrvUSD balance than actual required (userDebt) to liquidate a borrower, this may wrongly block a liquidation.
Manual Review
The checking should be comparing StabilityPool CrvUSD balance with userDebt which has already been compounded.
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.