Liquid Staking

Stakelink
DeFiHardhatOracle
50,000 USDC
View results
Submission Details
Severity: low
Invalid

Ownership Transfer Of The `LSTRewardsSplitterController` Fails To Transfer Ownership Of Splitters

Summary

Transferring the LSTRewardsSplitterController to a new owner continues to persist ownership of the child LSTRewardSplitters against the previous owner.

Vulnerability Details

When the LSTRewardsSplitterController adds a new LSTRewardSplitter, ownership of the created LSTRewardSplitter goes to the current owner of the LSTRewardsSplitterController:

/**
* @notice Deploys a new splitter
* @param _account address of account to deploy splitter for
* @param _fees list of splitter fees
*/
function addSplitter(
address _account,
LSTRewardsSplitter.Fee[] memory _fees
) external onlyOwner {
if (address(splitters[_account]) != address(0)) revert SplitterAlreadyExists();
@> address splitter = address(new LSTRewardsSplitter(lst, _fees, owner()));
splitters[_account] = ILSTRewardsSplitter(splitter);
accounts.push(_account);
IERC677(lst).safeApprove(splitter, type(uint256).max);
}

However, as LSTRewardSplitterController is Ownable, if the LSTRewardSplitterController itself were to be transferred to a new owner, old splitters continue to be recorded against the older owner.

Impact

Ownership transfer results in the inadvertant inability to administer splitters.

Tools Used

Manual Review

Recommendations

Always configure the LSTRewardsSplitterController as the owner of child LSTRewardSplitters, as ownership transfer of the LSTRewardsSplitterController will implicitly transfer ownership of the related splitters.

This will require the LSTRewardSplitterController to expose an external interface to appropriate manage the owned splitters; the simplest way to achieve this would to expose an open external call to the LSTRewardsSplitterController owner.

Updates

Lead Judging Commences

inallhonesty Lead Judge 12 months ago
Submission Judgement Published
Validated
Assigned finding tags:

[INVALID] The owner of LSTRewardsSplitter is not set according to the docs

Appeal created

inallhonesty Lead Judge 12 months ago
Submission Judgement Published
Invalidated
Reason: Design choice
Assigned finding tags:

[INVALID] The owner of LSTRewardsSplitter is not set according to the docs

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.