Core Contracts

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

LiqidityPool `setParams` should introduce changes with some delay

Summary

In LiquidityPool::setParameter, the contract owner has the ability to modify critical risk parameters such as liquidationThreshold, healthFactorLiquidationThreshold, and liquidationGracePeriod at any time. This creates a potential vulnerability where user positions may be unexpectedly liquidated or prevented from repaying debt due to abrupt changes in the grace period.

function setParameter(OwnerParameter param, uint256 newValue) external override onlyOwner {
if (param == OwnerParameter.LiquidationThreshold) {
require(newValue <= 100_00, "Invalid liquidation threshold");
liquidationThreshold = newValue;
emit LiquidationParametersUpdated(liquidationThreshold, healthFactorLiquidationThreshold, liquidationGracePeriod);
}
else if (param == OwnerParameter.HealthFactorLiquidationThreshold) {
healthFactorLiquidationThreshold = newValue;
emit LiquidationParametersUpdated(liquidationThreshold, healthFactorLiquidationThreshold, liquidationGracePeriod);
}
else if (param == OwnerParameter.LiquidationGracePeriod) {
require(newValue >= 1 days && newValue <= 7 days, "Invalid grace period");
liquidationGracePeriod = newValue;
emit LiquidationParametersUpdated(liquidationThreshold, healthFactorLiquidationThreshold, liquidationGracePeriod);
}
else if (param == OwnerParameter.LiquidityBufferRatio) {
require(newValue <= 100_00, "Ratio cannot exceed 100%");
uint256 oldValue = liquidityBufferRatio;
liquidityBufferRatio = newValue;
emit LiquidityBufferRatioUpdated(oldValue, newValue);
}
else if (param == OwnerParameter.WithdrawalStatus) {
require(newValue <= 1, "Invalid boolean value");
withdrawalsPaused = newValue == 1;
emit WithdrawalsPauseStatusChanged(withdrawalsPaused);
}
else if (param == OwnerParameter.CanPaybackDebt) {
require(newValue <= 1, "Invalid boolean value");
canPaybackDebt = newValue == 1;
emit CanPaybackDebtChanged(canPaybackDebt);
}
}

Vulnerability Details

  1. Sudden Liquidation Risk
    The liquidationThreshold and healthFactorLiquidationThreshold can be lowered without warning, instantly making user positions liquidatable.
    Users who were previously safe could become eligible for liquidation without any prior notification or opportunity to adjust their positions.

  2. Debt Repayment Obstruction
    The liquidationGracePeriod determines the time users have to repay their debt after liquidation starts.
    If the owner shortens this period, users who were relying on the original grace period may find themselves unable to repay their debt, leading to forced liquidation.

Impact

Unexpected Liquidations: Users may lose their collateral without warning.

Debt Repayment Failures: Users planning to repay their debt may be blocked due to grace period changes.

Tools Used

Manual review

Recommendations

Introduce a timelock mechanism (e.g., 24-48 hours) before changes to critical parameters take effect. This ensures users have sufficient time to react to changes.

Updates

Lead Judging Commences

inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity
inallhonesty Lead Judge 4 months ago
Submission Judgement Published
Invalidated
Reason: Non-acceptable severity

Support

FAQs

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