codehawks-2023-07-dsc-l07
[L-07] Missing Division By 0 Check
Summary
0으로 나누는 상황을 처리하지 않았다.
Keyword
division by 0, arithmetic error
Vulnerability
function getTokenAmountFromUsd(address token, uint256 usdAmountInWei) public view returns (uint256) {
// price of ETH (token)
// $/ETH ETH ??
// $2000 / ETH. $1000 = 0.5 ETH
AggregatorV3Interface priceFeed = AggregatorV3Interface(s_priceFeeds[token]);
(, int256 price,,,) = priceFeed.staleCheckLatestRoundData();
// ($10e18 * 1e18) / ($2000e8 * 1e10)
@> return (usdAmountInWei * PRECISION) / (uint256(price) * ADDITIONAL_FEED_PRECISION);
}나눗셈 연산을 할 때 0으로 나누려고 하는지 확인하지 않아 트랜잭션이 revert 될 수 있다. price에는 Chainlink 가격 피드에서 제공한 값이 있다.
getTokenAmountFromUsd 함수는 liquidate 함수(청산 기능)에서 이용되므로, 담보 토큰의 가격이 0이면 청산이 불가해진다.
Impact
트랜잭션이 revert 된다. 담보 토큰의 가격이 0인 경우 청산이 불가하다.
Mitigation
0으로 나누는 상황을 명시적으로 처리한다.
tags: bughunting, codehawks, smart contract, solidity, division by zero, arithmetic error, severity low