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.