ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 솔리디티 로우레벨 취약점
    카테고리 없음 2018. 7. 17. 14:24




    해당 컨트랙트에 Deposit 함수를 사용하여 계약 주소를

    충전한 후 send()를 사용하여 계약 주소를 전송합니다


    여기서 전송결과는 false라는 사실을 확인 할 수 있다.


    즉 악의적인 컨트랙트로 이러한 기능을 보낼때 수신자가 컨트랙트이므로 계약서에 

    폴백 기능이 있어야 한다.

    그러한 기능이 없는 경우 컨트랙트는 정기적인 거래를 통해 ether를 받을 수 없다 


    폴백기능

    이더를 수신하려면 fallback 기능을 표시행헌더,

    payable 

    없다 


    Contracts that receive Ether directly (without a function call, i.e. using send or transfer) but do not define a fallback function throw an exception, sending back the Ether (this was different before Solidity v0.4.0). So if you want your contract to receive Ether, you have to implement a fallback function.

    경고 - 

    ether를 직접 받는 (즉 함수 호출없이 send 또는 transfer을 사용하는 ) fallback 함수를 정의하지 않고 ether를 받는 계약은 계약서에 ether를 받기 위해선 대체 기능을 만들어야한다 .






    여기서 반환체크가 수행되지 않으므로 

    다음 줄의 코드가 계속 되고

    최종 금액은 이전되지 않았으나 잔액이 차감되게 됩니다.



    취약점 방어 방법 -

    또는 취약한 함수 send를 사용하지 않고 

    transfer 함수를 통하여 롤백시킨다 . 




    댓글

Designed by Tistory.