rETH tokens has implemented an "unstake delay" to prevent sandwich attack. This delay has been set to 0 and replaced by fees, but if for any reason it is set back to a non zero value, users will not be anymore able to unstake from the bridge.
The protocol allow users who deposited rETH into the bridge to either withdraw it or unstake it:
The thing is, RocketPool rETH tokens have a deposit delay parameter that prevents any user who has recently deposited to transfer or burn tokens:
In the past this delay was set to 5760 blocks mined (aprox. 21h, considering one block per 12s), but it has been set to 0, and replaced by fees instead (the delay was set to mitigate sandwich attack)
While it's not currently possible due to RocketPool's configuration, any future changes made to this delay by the admins could potentially lead to a denial-of-service attack on the unstake()
mechanism.
After depositing, a user must wait a delay before being able to withdraw its stake
But here, its the bridge contract who deposit, which mean each time a user deposit through the bridge,
the delay is reset.
As there is a possibility for user to withdraw their rETH directly without unstaking, but still can possibly make it impossible to use the function, I classified it as medium severity.
in the unstake
function, rocketTokenRETH.burn
is called
Which itself _beforeTokenTransfer
, and this one is subject to a delay depending on last deposit
Users will not be able to unstake from the bridge.
Manual review
Check that the timelock period will not make revert the withdrawal and, if so, use a DEX to convert the rETH to ETH.
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.