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

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

by Danny_Kim 2023. 8. 25.

🔑 코인 투자 추천 링크 🔑

  1. 비트코인, 알트코인 투자 노하우 모두 공개
  2. OKX 거래소 - 20% 수수료 할인
  3. 플립스터 거래소 - USDT 15% 이자
  4. 해시키 거래소 - HSK 에어드랍

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. 플립스터 거래소 - USDT 15% 이자
  4. 해시키 거래소 - HSK 에어드랍

댓글