In BridgeRouterFacet.sol, both deposit and depositEth methods deposit the user's collateral via bridge, and the bridge returns a zETH amount which the BridgeRouterFacet.sol should credit to the user. However, while for rETH bridge the bridge uses a oracle to convert rETH to ETH to return a precise amount of zETH, the stETH bridge just returns the value of stETH the user deposited, assuming that stETH:ETH:zETH, which makes the protocol vulnerable to exploits and price fluctuations of stETH.
In BridgeRouterFacet.sol, both deposit and depositETH has this line of code:
It returns a value of zethAmount which uses should get based on how much he deposited.
When user deposits stETH, the method depositEth in BridgeSteth.sol is called:
The method above just retuns the netBalance, which is the value of stETH you deposited as the zETHAmount. This is flawed, because any attack or price fluctuation in stETH that decreases it's value will directly impact our bridge. For example, if stETH is 90% of ETH price, then users are getting zETH in our protocol with 10% discount.
Probability: Low.
Severity: High.
Impact: Medium.
The security of "minting" zETH via stETH deposits have a great dependancy in stETH price.
Manual Review
To avoid this, the stETH:ETH chainlink oracle should be used.
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.