code-423n4 / 2022-01-insure-findings

2 stars 0 forks source link

Inconsistent divide by 0 checks for `totalLiquidity()` #356

Closed code423n4 closed 2 years ago

code423n4 commented 2 years ago

Handle

Dravee

Vulnerability details

Impact

A division by 0 could occur

Proof of Concept

While at some place, a check is made to make sure that totalLiquidity() > 0, it's not consistently the case, such as here:

File: PoolTemplate.sol
846:     function utilizationRate() public view override returns (uint256 _rate) {
847:         if (lockedAmount > 0) { 
848:             return (lockedAmount * MAGIC_SCALE_1E6) / totalLiquidity();
849:         } else {
850:             return 0;
851:         }
852:     }

At the following place, the check is indeed made:

File: IndexTemplate.sol
491:     function leverage() public view returns (uint256 _rate) {
492:         //check current leverage rate
493:         if (totalLiquidity() > 0) {
494:             return (totalAllocatedCredit * MAGIC_SCALE_1E6) / totalLiquidity();
495:         } else {
496:             return 0;
497:         }
498:     }

Tools Used

VS Code

Recommended Mitigation Steps

If this check is at least made at some places, this means that this variable can indeed take a value of 0. Therefore, a check should always be made to prevent the div by 0

oishun1112 commented 2 years ago

similar issue https://github.com/code-423n4/2022-01-insure-findings/issues/287