There is a possibility that the VaultDepositController::deposit function could be called by an external contract or any other address without using delegatecall.
According to the documentation, function VaultDepositController::deposit should only be called by VaultControllerStrategy using delegatecall. however, no check has been made to ensure that this function is only called only using delegatecall and by no other address than address(VaultControllerStrategy). This means that any address can call this function and by direct calls.
In the VaultControllerStrategy abstract contract, we can see that access control is applied to the VaultControllerStrategy::deposit function and that the VaultDepositController::deposit function is called via delegatecall :
So the VaultDepositController::deposit function will be executed in the context of the staking pool as desired. But no restrictions have been placed on this function to ensure that it is only called by delegatecall and only by the staking pool.
Unexpected behavior. And If any external user or contract is able to call deposit directly and transfer tokens, it could lead to undesirable outcomes, such as unauthorized deposits or incorrect token transfers.
Manual review.
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.