[SCH] Oracle Manipulation

frenchkebab·2023년 5월 20일
0

Web3

목록 보기
7/8
post-thumbnail

SCH 강의에서 나온 2가지의 사례를 짧게 정리해보고자 한다.

Case1: Centralized Oracle

만약 Oracle이 centralized되어 있다면 문제가 될 수 있다.

이 경우에 대해서 나는 당연히 고려를 하지 않았는데, 생각보다 실제 사례가 있었다.

예를 들어 하나의 admin account에서 api를 통해 계속 price를 올려주게 된다면,
해당 admin의 pk가 탈취될 경우, 해당 oracle을 사용하는 모든 프로토콜들이 다 망가지게 될 수 있다.

Case2: Oracle Manipulation

Oracle의 가격을 조작함으로서 발생할 수 있는 일인데 이번에 나온 예제가 흥미로웠다.

UniswapV2에서 가격을 조작하는 방식이였다.

    function isSafeDebt(address _token, address _user) public view returns (bool) {
        
        uint reserve0 = IERC20(token0).balanceOf(pair);
        uint reserve1 = IERC20(token1).balanceOf(pair);
        uint collateral; // user's collateral

        if(_token == token0) { 
            collateral = deposited[token1][_user] * reserve0 / reserve1;
        } else {
            collateral = deposited[token0][_user] * reserve1 / reserve0;
        }

        uint allowance = collateral * 2 / 3; // 66% LTV (Loan To Value)
        return allowance >= debt[_token][_user];
    }

debt에서 collateral을 계산하는 방식인데 문제점이 보이는가?

pair의 reserve가 아닌 balance를 가져오고 있다.

따라서, attacker가 순간에 Flash Swap으로 1 wei만 남겨놓고 하나의 자산을 모두 빌려오게 되면, 해당 자산의 가격이 천정부지로 오르게 되어 1 wei 만으로도 엄청난 양의 가치를 가지게 된다.

profile
Blockchain Dev Journey

0개의 댓글