Skip to content

Latest commit

 

History

History
50 lines (27 loc) · 2.1 KB

File metadata and controls

50 lines (27 loc) · 2.1 KB

Bald Cloud Pony

High

Market rate of bondETH is wrongly used during redeeming levETH

Summary

When redeeming reserve tokens from the pool with a collateral level of less than 1.2, the protocol uses a lesser value calculated according to the formula and market value of the token returned by the oracle.

The same is stated in the documentation, for example, this is an excerpt about the levETH redemption logic:

If the collateral level is less than 1.2, the redemption price of 1 levETH is the lesser of 20% * the quantity of wstETH in the vault * the oracle price of wstETH / the amount of levETH outstanding and the oracle levETH price on Aerodrome.

https://convexitylabs.notion.site/EXT-Financial-Mechanism-Overview-46ecc3b204c04e66a21957fbcf5f4c05

However, we can see that in the code the market price of bondETH is used even during levETH redemption. This leads to incorrectly defined results of the amount of reserve tokens to redeem and eventually may result in losses for users or protocol

Root Cause

In Pool.sol:443-451, https://github.com/sherlock-audit/2024-12-plaza-finance/blob/main/plaza-evm/src/Pool.sol#L443-L451 the redeem() function always retrieves marketRate of bondToken even in the case of tokenType == TokenType.LEVERAGE.

Later, marketRate is used in getRedeemAmount() function to determine the amount of reserve tokens to send to the user: https://github.com/sherlock-audit/2024-12-plaza-finance/blob/main/plaza-evm/src/Pool.sol#L519-L521.

This effectively leads to wrong amount of tokens sent to the user. Precisely, a user redeeming levETH may receive tokens calculated as: (depositAmountOfLevETH * marketRateOfBondETH) / ETHPrice

Internal Pre-conditions

  1. Feed for retrieving the market price of bondETH is set

External Pre-conditions

No response

Attack Path

No response

Impact

The protocol or users may incur losses depending on the difference between the marketRate of bondETH and marketRate of levETH.

PoC

No response

Mitigation

Retrieve and use the price of levETH token as marketRate in case of redeeming tokenType == TokenType.LEVERAGE.