No access control was apply to the VaultDepositController::withdraw function.This means that anyone can call it, and with any type of call.
The VaultDepositController::withdraw function should only be called by the VaultControllerStrategy contract and only using the delegatecall as specified in the documentation:
We can see this `delegatcall` in action in the abstract contract `VaultControllerStrategy` :
We see that the VaultDepositController::withdraw is called via delegatecall by the VaultControllerStrategy and that msg.sender is the staking pool as explained in the documentation, which is fine. But the problem is that no restrictions have been applied to the VaultDepositController::withdraw target function to ensure that the msg.sender is always the staking pool and that the call is always the delegatecall. This means that the VaultDepositController::withdraw function can also be called directly from any address other than the address of staking pool.
Unexpected behavior. And If any external user or contract is able to call VaultDepositController::withdraw function, it could lead to undesirable outcomes, such as unauthorized withdraw or Unexpected behavior issues.
Manual analysis.
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.