In the processWithdraw()
function, if self.depositCache.depositParams.token == address(self.WNT)
, there is a call to the user's address. If a malicious actor sets up a contract for the receiver that reverts, the execution will fail, and the catch will execute setting the state to Withdraw_Failed.
No penalty is imposed on malicious actors who interact with this.
The ease with which a bad actor can set the status to failed, forcing keepers to retry the call or fix the issue, is too great.
Manual Review
Add penalties for malicious actors as a punitive measure or consider an alternative method for claiming tokens, such as a two-step process that involves transferring them first to the vault.
Impact: High Likelihood: High An attacker can repeatedly force the protocol to get stuck in a not-open status. This can happen on both deposit, withdraw callback for both successful execution and failures. Will group all similar issues.
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.