(, uint TCR, , ) = storagePool.checkRecoveryMode(vars.priceCache); /// @audit High? not checking RM -> Mint for free, Inflate total supply (pay no redemption), redeem at small fee
if (TCR < MCR) revert LessThanMCR(); /// @audit-ok force to liquidate if all system is insolvent
This is because during Recovery Mode, minting fees are voided, meaning that the system may open up to additional arbitrages via Redemptions
Redemptions are generally disabled during RM in favour of liquidations
Mitigation
Investigate if additional arbitrages could be detrimental to your protocol due to reduced minting fees
Impact
RedemptionOperations
checks theTCR < MCR
, but should most likely check forTCR < CCR
https://github.com/blkswnStudio/ap/blob/8fab2b32b4f55efd92819bd1d0da9bed4b339e87/packages/contracts/contracts/RedemptionOperations.sol#L101-L103
This is because during Recovery Mode, minting fees are voided, meaning that the system may open up to additional arbitrages via Redemptions
Redemptions are generally disabled during RM in favour of liquidations
Mitigation
Investigate if additional arbitrages could be detrimental to your protocol due to reduced minting fees
From checking liquity they use a check similar to yours: https://github.com/liquity/dev/blob/e38edf3dd67e5ca7e38b83bcf32d515f896a7d2f/packages/contracts/contracts/TroveManager.sol#L948-L962