An attacker can distribute assets of the Liquidation pool to the holders due to the missing access control in LiquidationPool.distributeAssets.
LiquidationPool.distributeAssets is missing access control. It is supposed be called only by its maanger via LiquidationPoolManager.runLiquidation action, where burning of EUROs and assets are distributed after someone vault's liquidation.
so currently LiquidationPool holds a lot of EUROs and TST, so all this balance of assets staked by users can be again distributed to holders, where an attacker can deposit for > 90% of the holders stake and call this distributeAssets and get 90% of rewards to himself. And within a same block, he can exit the Liquidation pool stake.
But as an attacker, anyone can call with any parameters. An attacker can enter with any collateralRatio and assets array, leading to assets getting distributed to holders.
But In order to distribute ether ERC20 tokens and ether or burn EUROs, we need approval or transfer which is done by LiquidationPool.distributeAssets as shown below.
High.
Burn the entire EUROs of Liquidation pool, And distribute Ether to hlders not even when liquidation happens.
We should only distribute if liquidation of vault happens.
Manual review
Add onlyManager modifier to LiquidationPool.distributeAssets
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.