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.