Different ownership implementations were found between three of the four contracts in scope:
SmartVaultManagerV5 is using OwnableUpgradeable from OpenZeppelin.
LiquidationPoolManager is using Ownable from OpenZeppelin.
SmartVaultV3 is using a custom ownership logic.
However, none of them required the new proposed owner to accept the role. The lack of a 2-step process can lead to the loss of the ownership if a wrong address is used when changing the current owner.
Similar finding from other contests:
https://solodit.xyz/issues/lack-of-two-step-ownership-pattern-halborn-floin-floin-s-pdf
https://solodit.xyz/issues/l-04-use-code4rena-redacted-cartel-redacted-cartel-contest-git
https://solodit.xyz/issues/l-01-use-code4rena-escher-escher-contest-git
https://solodit.xyz/issues/single-step-ownership-change-is-risky-spearbit-none-nouns-dao-pdf
All three ownership models explained above and pointed in the "Relevant GitHub Links" section above lack the ability to accept the ownership by the newly proposed owner.
If the new address is inactive or not willing to act in the role, there is no way to restore access to that role. Therefore, the owner role can be lost.
Manual analysis.
For SmartVaultManagerV5 consider using Ownable2StepUpgradeable instead of OwnableUpgradeable.
For LiquidationPoolManager consider using Ownable2Step instead of Ownable.
For SmartVaultV3 consider implementing a proper 2-step approach for ownership transfers or using Ownable2Step by OpenZeppelin.
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.