RocketPool’s rETH token has a built in hook called _beforeTokenTransfer
that's called in the transfer
function which can restrict transferring to only when the depositDelay
value has been met, this can be set by the DAO governing the RocketPool protocol and previously this value had been set to 5760 blocks (~19hrs). Any call to rETH's stake
function resets the lastDepositBlock
which is compared to depositDelay
and determines when the user can withdraw, so if the depositEth
function is being frequently called in BridgeRouterFacet
this prevents users from removing their rETH from the system because lastDepositBlock
will never be greater than depositDelay
.
Currently the _beforeTokenTransfer
has no depositDelay
set, but this could be changed by a governance vote by the RocketPool DAO. If the system expects to have high throughput with users calling depositEth
frequently, this would subsequently reset the time for other users to withdraw each time and would prevent any rETH holders from exiting the system because this effects all transfers, not just calls to transfer
directly, as calls to the BridgeRouterFacet::unstakeEth
also call transfer
on the rETH token when burning.
There is also the potential for an attacker to intentionally DOS rETH depositors by continuously depositing the minimum amount of ETH within a 19 hour window (if the depositDelay
were set to 5760 blocks again), so that calls to withdraw
or unstakeEth
always revert.
This makes the ability to withdraw a potentially large fraction (given that stETH is the only other currently supported LST) of the collateral in the system dependent on future implementation decisions of a the RocketPool protocol, making the two tightly coupled.
This is similar to the issue identified here: https://solodit.xyz/issues/m-08-possible-dos-on-unstake-code4rena-asymmetry-finance-asymmetry-contest-git
User's can be DOS'd from withdrawing rETH from the system.
Manual Review
The Uniswap ETH/rETH pool could allow users to obtain rETH by swapping for it instead of directly staking in the protocol which prevents any potential future issues with depositDelay
being set. This could be coupled with a circuit-breaker that only falls back to the Uniswap pool if the depositDelay
value is set so that while it's not set users get a better price and are only subject to the slippage of the Uniswap pool if it's necessary to allow withdrawals.
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.