58168 sc medium safe position liquidation vulnerability in alchemistv3 when minimumcollateralization equals collateralizationlowerbound
Description
Summary:
Description:
function initialize(AlchemistInitializationParams memory params) external initializer {
_checkArgument(params.protocolFee <= BPS);
_checkArgument(params.liquidatorFee <= BPS);
_checkArgument(params.repaymentFee <= BPS);
debtToken = params.debtToken;
underlyingToken = params.underlyingToken;
underlyingConversionFactor = 10 ** (TokenUtils.expectDecimals(params.debtToken) - TokenUtils.expectDecimals(params.underlyingToken));
depositCap = params.depositCap;
// @audit no validation here done to check that that minimumCollateralization and collateralizationLowerBound shouldn't be equal.
minimumCollateralization = params.minimumCollateralization;
globalMinimumCollateralization = params.globalMinimumCollateralization;
collateralizationLowerBound = params.collateralizationLowerBound;
admin = params.admin;
transmuter = params.transmuter;
protocolFee = params.protocolFee;
protocolFeeReceiver = params.protocolFeeReceiver;
liquidatorFee = params.liquidatorFee;
repaymentFee = params.repaymentFee;
lastEarmarkBlock = block.number;
lastRedemptionBlock = block.number;
myt = params.myt;
}
/// @inheritdoc IAlchemistV3AdminActions
function setMinimumCollateralization(uint256 value) external onlyAdmin {
_checkArgument(value >= FIXED_POINT_SCALAR);
minimumCollateralization = value;
emit MinimumCollateralizationUpdated(value);
}
// @audit here we can see that if new value of collateralizationLowerBound is get = to minimumCollateralization is ok and set.
/// @inheritdoc IAlchemistV3AdminActions
function setCollateralizationLowerBound(uint256 value) external onlyAdmin {
_checkArgument(value <= minimumCollateralization);
_checkArgument(value >= FIXED_POINT_SCALAR);
collateralizationLowerBound = value;
emit CollateralizationLowerBoundUpdated(value);
}
Impact
Mitigation step
Proof of Concept
Proof of Concept
Previous57172 sc high missing mytsharesdeposited decrements in liquidation flows causes accounting divergenceNext58149 sc low morphoyearnogweth incorrectly reports loss and triggers strategydeallocationloss event
Was this helpful?