Liquid Staking

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

Missing Check for Removed Vaults in VaultControllerStrategy Contract

Summary

Missing Check for Removed Vaults in VaultControllerStrategy Contract

Vulnerability Details

In the _depositToVaults function of the VaultControllerStrategy contract, there is a loop for depositing into ungrouped vaults. However, this loop lacks a check for whether the vault has been removed (isRemoved). This could potentially lead to depositing funds into deactivated vaults, resulting in fund loss or mismanagement.

contracts/linkStaking/base/VaultControllerStrategy.sol
uint256 numVaults = vaults.length;
uint256 i = globalState.depositIndex;
while (i < numVaults) {
IVault vault = vaults[i];
uint256 deposits = vault.getPrincipalDeposits();
uint256 canDeposit = _maxDeposits - deposits;
// ... deposit logic ...
++i;
}

Impact

Implementing this change will enhance the contract's security and reliability by preventing funds from being erroneously deposited into removed vaults.

Tools Used

vscode

Recommendations

Add a check for vault.isRemoved() before performing any deposit operations. This will ensure that only active vaults receive deposits. The suggested code modification is as follows:

while (i < numVaults) {
IVault vault = vaults[i];
if (!vault.isRemoved()) {
uint256 deposits = vault.getPrincipalDeposits();
uint256 canDeposit = _maxDeposits - deposits;
// ... deposit logic ...
}
++i;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge about 1 year ago
Submission Judgement Published
Validated
Assigned finding tags:

Potential Deposit Reverts Due to Removed Operator Vaults

Support

FAQs

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