Submitted by oakcobalt, also found by bin2chen and Ch_301
If a debt asset has a blacklisting feature (e.g., USDC), and an isolated borrower/bidder is blacklisted by the asset token, isolated liquidation/auction of the corresponding loan can be DOSsed.
When a user is blacklisted by an erc20 token, the asset cannot be transferred in or out of the blacklisted users account.
When the next bidder outbids by calling IsolateLogic::executeIsolateAuction, the previous bidders bid amount is returned. Because previous bidder is blacklisted after placing the bid, VaultLogic.erc20TransferOutBidAmount(debtAssetData, vars.oldLastBidder, vars.oldBidAmount) will revert the auction tx. At this point, no one can bid on the loan.
https://github.com/code-423n4/2024-07-benddao/blob/117ef61967d4b318fc65170061c9577e674fffa1/src/libraries/logic/IsolateLogic.sol#L262
After the auction ends, when the liquidator calls executeIsolateLiquidate(), if the last bid amount is greater than total debt, the extra amount (last bid amount - total debt) has to be transferred to the borrower in the current implementation.
https://github.com/code-423n4/2024-07-benddao/blob/117ef61967d4b318fc65170061c9577e674fffa1/src/libraries/logic/IsolateLogic.sol#L444
However, VaultLogic.erc20TransferOutBidAmount(debtAssetData, tokenData.owner, vars.remainBidAmounts[vars.nidx]) will revert due to the original borrower (tokenData.owner) is blacklisted.
In the isolate auction or liquidation flow, consider using try-catch block to handle VaultLogic.erc20TransferOutBidAmount.
thorseldon (BendDAO) acknowledged and commented:
0xTheC0der (judge) commented:
