Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: medium
Valid

Incorrect Utilization Rate Calculation in `updateInterestRatesAndLiquidity`

Summary

The function updateInterestRatesAndLiquidity in ReserveLibrary is called after each transaction in LendingPool. However, it incorrectly calculates the utilization rate using old values instead of the newly calculated ones. This leads to inaccurate interest rate calculations, potentially causing fund loss for some users.

Vulnerability Details

The function calculates computedDebt and computedLiquidity based on current indexes but when calculating the utilization rate, it still relies on the old values instead of using the newly computed ones:

function updateInterestRatesAndLiquidity(ReserveData storage reserve,ReserveRateData storage rateData,uint256 liquidityAdded,uint256 liquidityTaken) internal {
-- snip --
uint256 computedDebt = getNormalizedDebt(reserve, rateData);
uint256 computedLiquidity = getNormalizedIncome(reserve, rateData);
// Calculate utilization rate
uint256 utilizationRate = calculateUtilizationRate(reserve.totalLiquidity, reserve.totalUsage);

Impact

When no new liquidity or debt is added or removed, reserve.totalLiquidity and reserve.totalUsage remain unchanged, while the actual debt and liquidity amounts increase due to interest rate accrual. Over time this discrepancy grows larger, causing the next user to receive a highly inaccurate utilization rate. As a result, the borrowing and liquidity rates will be significantly miscalculated.
Borrowers and lenders will experience inaccurate interest rates.

Tools Used

vscode

Recommendations

uint256 computedDebt = getNormalizedDebt(reserve, rateData);
uint256 computedLiquidity = getNormalizedIncome(reserve, rateData);
// Calculate utilization rate
- uint256 utilizationRate = calculateUtilizationRate(reserve.totalLiquidity, reserve.totalUsage);
+ uint256 utilizationRate = calculateUtilizationRate(computedLiquidity, computedDebt);
Updates

Lead Judging Commences

inallhonesty Lead Judge 5 months ago
Submission Judgement Published
Validated
Assigned finding tags:

ReserveLibrary calculates computedDebt and computedLiquidity but never uses them, leading to stale totalUsage and totalLiquidity values in utilization rate calculations

inallhonesty Lead Judge 5 months ago
Submission Judgement Published
Validated
Assigned finding tags:

ReserveLibrary calculates computedDebt and computedLiquidity but never uses them, leading to stale totalUsage and totalLiquidity values in utilization rate calculations

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.