본문 바로가기
블록체인교육/블록체인보안

[블록체인 보안] 스마트컨트랙트 취약 (transfer(),send() 부적절한사용)

by Danny_Kim 2023. 8. 25.

🔑 코인 투자 추천 링크 🔑

  1. 블록체인 마스터 과정
  2. OKX 거래소 20% 수수료 할인혜택[공식 파트너]
  3. 바이비트 거래소 20% 수수료 할인혜택[공식 파트너]

payable.transfer(), send()의 부적절한 사용

 

이스탄불 하드포크에서 EIP1884가 시행된 이후, SLOAD 작업의 가스 비용이 증가함으로써 일부 기존 스마트계약이 손상됨.

 

ETH를 수신자에게 전송할때, 솔리디티의 transfer() 또는 send() 매서드를 사용하는 경우 특정한 결함이 발생할 수 있는데, 특히 수신자가 스마트계약인 경우임.

이러한 결함으로 인해 ETH를 스마트계약 수신자에게 성공적으로 전송할 수 없게 될 수 있음.

 

구체적으로 스마트계약이 다음중 하나를 만족할때 전송은 반드시 실패함.

1 . 지불 가능한 fallback 함수를 구현하지 않은 경우.

  1. 지불 가능한 fallback 함수가 2300 이상의 가스 단위를 소비하는 경우
  2. 2300 이하의 가스단위를 소비하는 지불 가능한 fallback 함수를 구현하지만, 이 함수가 2300을 초과하는 호출을 발생시키는 프록시를 통해 호출되는 경우.

 

조치방안

Re-entrancy 가드와 함께 반환된 불리언을 확인하는 call 사용하는 것이 권장됨.

 

코드취약부분

 

테스트소스

https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/payable-transfer.sol

 

 

테스트

]

 

참고문서

https://web3sec.notion.site/Incorrect-use-of-payable-transfer-or-send-9a947f5ffb6e4ec29b664ee0e2e1edb4

 

 

🔑 코인 투자 추천 링크 🔑

  1. 블록체인 마스터 과정
  2. OKX 거래소 20% 수수료 할인혜택[공식 파트너]
  3. 바이비트 거래소 20% 수수료 할인혜택[공식 파트너]

댓글