sherlock-audit / 2024-02-tapioca-judging

2 stars 2 forks source link

bareli - uninitialize "collateralizationRate" and "liquidationCollateralizationRate" in Market.sol. #104

Closed sherlock-admin2 closed 6 months ago

sherlock-admin2 commented 6 months ago

bareli

medium

uninitialize "collateralizationRate" and "liquidationCollateralizationRate" in Market.sol.

Summary

we are in initialize collateralizationRate and liquidationCollateralizationRate in setMarketConfig. if _liquidationCollateralizationRate and _CollateralizationRate is 0 then collateralizationRate and liquidationCollateralizationRate are always 0. which can cause a big issue.

Vulnerability Detail

uint256 public collateralizationRate; // 75%

uint256 public liquidationCollateralizationRate;

function setMarketConfig(
    ITapiocaOracle _oracle,
    bytes calldata _oracleData,
    address _conservator,
    uint256 _protocolFee,
    uint256 _liquidationBonusAmount,
    uint256 _minLiquidatorReward,
    uint256 _maxLiquidatorReward,
    uint256 _totalBorrowCap,
    uint256 _collateralizationRate,
    uint256 _liquidationCollateralizationRate
) external onlyOwner {
    if (address(_oracle) != address(0)) {
        oracle = _oracle;
        emit OracleUpdated(address(_oracle));
    }

    if (_oracleData.length > 0) {
        oracleData = _oracleData;
        emit OracleDataUpdated();
    }

    if (_conservator != address(0)) {
        emit ConservatorUpdated(conservator, _conservator);
        conservator = _conservator;
    }

    if (_protocolFee > 0) {
        require(_protocolFee <= FEE_PRECISION, "Market: not valid");
        protocolFee = _protocolFee;
        emit ValueUpdated(2, _protocolFee);
    }

    if (_liquidationBonusAmount > 0) {
        require(_liquidationBonusAmount < FEE_PRECISION, "Market: not valid");
        liquidationBonusAmount = _liquidationBonusAmount;
        emit ValueUpdated(3, _liquidationBonusAmount);
    }

    if (_minLiquidatorReward > 0) {
        require(_minLiquidatorReward < FEE_PRECISION, "Market: not valid");
        require(_minLiquidatorReward < maxLiquidatorReward, "Market: not valid");
        minLiquidatorReward = _minLiquidatorReward;
        emit ValueUpdated(4, _minLiquidatorReward);
    }

    if (_maxLiquidatorReward > 0) {
        require(_maxLiquidatorReward < FEE_PRECISION, "Market: not valid");
        require(_maxLiquidatorReward > minLiquidatorReward, "Market: not valid");
        maxLiquidatorReward = _maxLiquidatorReward;
        emit ValueUpdated(5, _maxLiquidatorReward);
    }

    if (_totalBorrowCap > 0) {
        emit LogBorrowCapUpdated(totalBorrowCap, _totalBorrowCap);
        totalBorrowCap = _totalBorrowCap;
        emit ValueUpdated(6, _totalBorrowCap);
    }

 @>   if (_collateralizationRate > 0) {
        require(_collateralizationRate <= FEE_PRECISION, "Market: not valid");
        require(_collateralizationRate <= liquidationCollateralizationRate, "Market: collateralizationRate too big");
        require(
            _collateralizationRate * (FEE_PRECISION + liquidationMultiplier) < FEE_PRECISION * FEE_PRECISION,
            "Market: CR * (1 + LM) >= 1"
        );
        collateralizationRate = _collateralizationRate;
        emit ValueUpdated(7, _collateralizationRate);
    }

@> if (_liquidationCollateralizationRate > 0) { require( _liquidationCollateralizationRate >= collateralizationRate, "Market: liquidationCollateralizationRate too small" ); require(_liquidationCollateralizationRate <= FEE_PRECISION, "Market: not valid"); liquidationCollateralizationRate = _liquidationCollateralizationRate; emit ValueUpdated(8, _liquidationCollateralizationRate); } }

Impact

Code Snippet

https://github.com/sherlock-audit/2024-02-tapioca/blob/main/Tapioca-bar/contracts/markets/Market.sol#L102 https://github.com/sherlock-audit/2024-02-tapioca/blob/main/Tapioca-bar/contracts/markets/Market.sol#L104

Tool used

Manual Review

Recommendation

uint256 public collateralizationRate=7500; // 75%
uint256 public liquidationCollateralizationRate=8000; //80%
cryptotechmaker commented 6 months ago

Invalid

nevillehuang commented 6 months ago

Invalid, admins trusted to input appropriate values for collateralization rates