In the processDepositCancellation()
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, yet the state will remain as Deposit
. This will necessitate constant intervention by the protocol owners to resolve the situation.
No penalty is imposed on malicious actors who interact with this. Furthermore, the absence of the try/catch pattern, which the protocol employs in most similar functions, provides us with less information about the status and error, while maintaining the state in Deposit
.
The potential need for the protocol to take drastic measures due to a state being stuck, which can occur with little to no penalty, is a concern that should be considered to ensure the protocol's robustness. Additionally, since the plan is to monitor failed events/tx with a sentinel and retry them, the unchanged status will also prevent automatic keepers from fixing this bug.
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. At the very least, implement a try-catch block to change the status to Deposit_Fail so that keepers are notified.
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.