Accidental renounceOwnership()
call can disrupt key operations in multiple contracts.
Medium
https://github.com/Cyfrin/2023-12-stake-link/blob/549b2b8c4a5b841686fceb9c311dca9ac58225df/contracts/core/ccip/RESDLTokenBridge.sol#L16C1-L16C39
https://github.com/Cyfrin/2023-12-stake-link/blob/549b2b8c4a5b841686fceb9c311dca9ac58225df/contracts/core/ccip/SDLPoolCCIPControllerPrimary.sol#L11C1-L11C65
https://github.com/Cyfrin/2023-12-stake-link/blob/549b2b8c4a5b841686fceb9c311dca9ac58225df/contracts/core/ccip/SDLPoolCCIPControllerSecondary.sol#L14C1-L14C67
https://github.com/Cyfrin/2023-12-stake-link/blob/549b2b8c4a5b841686fceb9c311dca9ac58225df/contracts/core/ccip/WrappedTokenBridge.sol#L19C1-L19C55
https://github.com/Cyfrin/2023-12-stake-link/blob/549b2b8c4a5b841686fceb9c311dca9ac58225df/contracts/core/sdlPool/LinearBoostController.sol#L10C1-L10C44
Ownable
contains a function named renounceOwnership()
which can be used to remove the ownership of contracts in a protocol.
This can lead to SDLPoolCCIPControllerPrimary
, SDLPoolCCIPControllerPrimary
, WrappedTokenBridge
, LinearBoostController
and RESDLTokenBridge
contracts becoming disowned, which will then break critical functions of the protocol.
The WrappedTokenBridge
, LinearBoostController
and RESDLTokenBridge
contracts inherit from Ownable
, SDLPoolCCIPControllerPrimary
from SDLPoolCCIPController
which inherits Ownable
, and SDLPoolCCIPControllerSecondary
inherits from SDLPoolCCIPControllerPrimary; and hence inherit renounceOwnership()
function.
The owner could accidentally (or intentionally) call renounceOwnership()
which transfers ownership to address(0)
. This will break numerous functions within each contract referenced that has the onlyOwner()
modifier assigned. Below are a list of those functions:
SDLPoolCCIPControllerPrimary
setRewardsInitiator()
setWrappedRewardToken()
approveRewardTokens()
removeWhitelistedChain()
addWhitelistedChain()
SDLPoolCCIPControllerSecondary
setExtraArgs()
WrappedTokenBridge
recoverTokens()
transferTokens()
LinearBoostController
setMaxLockingDuration()
setMaxBoost()
RESDLTokenBridge
.
setExtraArgs()
Add this test to test/core/ccip/sdl-pool-ccip-controller-primary.test.ts
Manual Review
Disable renounceOwnership()
if function in the Ownable contract not required.
accidentally renouncing ownership
accidentally renouncing ownership
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.