The giant pools have a bringUnusedETHBackIntoGiantPool function that calls the vaults to send back any unused ETH.
Currently, any call to this function will revert.
Unused ETH will not be sent to the giant pools and will stay in the vaults.
This causes an insolvency issue when many users want to withdraw ETH and there is not enough liquidity inside the giant pools.
Lines of code
https://github.com/code-423n4/2022-11-stakehouse/blob/4b6828e9c807f2f7c569e6d721ca1289f7cf7112/contracts/liquid-staking/GiantSavETHVaultPool.sol#L137 https://github.com/code-423n4/2022-11-stakehouse/blob/4b6828e9c807f2f7c569e6d721ca1289f7cf7112/contracts/liquid-staking/GiantMevAndFeesPool.sol#L126
Vulnerability details
Impact
Both giant pools are affected:
The giant pools have a
bringUnusedETHBackIntoGiantPool
function that calls the vaults to send back any unused ETH. Currently, any call to this function will revert. Unused ETH will not be sent to the giant pools and will stay in the vaults.This causes an insolvency issue when many users want to withdraw ETH and there is not enough liquidity inside the giant pools.
Proof of Concept
bringUnusedETHBackIntoGiantPool
calls the vaults to receive ETH: https://github.com/code-423n4/2022-11-stakehouse/blob/4b6828e9c807f2f7c569e6d721ca1289f7cf7112/contracts/liquid-staking/GiantSavETHVaultPool.sol#L137the vaults go through a process of burning the
_lpTokens
and sending the caller giant pool ETH.burnLPToken
https://github.com/code-423n4/2022-11-stakehouse/blob/4b6828e9c807f2f7c569e6d721ca1289f7cf7112/contracts/liquid-staking/SavETHVault.sol#L126Giant pools do not have a
fallback
orreceive
function. ETH cannot be sent to themadditionally, there is no accounting of
idleETH
, which should be increased with the received ETH in order to facilitate withdrawsTools Used
VS Code
Recommended Mitigation Steps
fallback
orreceive
function to the pools.idleETH
should be increased with the received ETH