Ownable2Step inherits the Ownable which contains a function named renounceOwnership which can be used to remove the ownership of contracts in a protocol.
This can lead to ConfidencePool.sol contract becoming diswoned, which will then break critical functions of the protocol.
ConfidencePool.sol inherits the Ownable2Step and renouncing ownership via renounceOwnership() is possible since function is not overriden. The owner can call renounceOwnership() and permanently set _owner = address(0), which freezes the setRecoveryAddress, setExpiry, setPoolScope, pause and unpause at their last state with no on-chain recovery path. Even with a properly-deployed Safe multisig as the brodcaster (so the multisig is Ownable owner), a fulty Safe transaction proposal that calls renounceOwnership() permanently disables governance over the corridor.
ConfidencePool.sol inherits the Ownable2Step (Source):
Ownable2Step inherits Ownable (Source):
if we take look at the Ownable from openzeppelin the function (Source) :
which makes call directly to the _transferOwnership() function (Source) :
in here there is no check for address(0) so directly transfer ownership to 0 leads to bricking all admin operations.
Likelihood:
The protocol uses administrative functions frequently to update core states like pool scopes, expiries, or recovery addresses.
A faulty Safe multisig transaction proposal or an operational error executes a call to the inherited renounceOwnership() function.
Impact:
The _owner is permanently set to address(0).
Critical administrative functions (setRecoveryAddress, setExpiry, setPoolScope, pause, and unpause) become permanently frozen, leaving no on-chain recovery path.
Step 1: Open the ConfidencePool.t.sol file under the folder test/unit/ConfidencePool.t.sol.
Step 2: copy and paste the below import under the all import and before ConfidencePoolTest.
Step 3: copy and paste the below test function into the ConfidencePoolTest at the very end.
Step 4: Run the below command to see result it will show result of renounce ownership.
Result:
Cosider overriding renounceOwnership() to revert when called by placing the following code in the ConfidencePool.sol:
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.
The contest is complete and the rewards are being distributed.