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

[블록체인 보안] 스마트컨트랙트 취약성(abi.encodePacked())

by Danny_Kim 2023. 8. 25.

🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑

  1. 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
  2. 아무도 알려주지 않은 비트코인, 이더리움의 리스크
  3. 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
  4. 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
  5. 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!

 

Abi.encodePacked() 해시 충돌

 

여러 가변 길이 인자와 함께 abi.encodePacked()을 사용하는 경우 특정 상황에서 해시 충돌이 발생할 수 있음.

해시함수는 각 입력에 대해 고유하도록 설계되었지만, 해시 함수의 크기 제한이나 가능한 입력 수의 한계로 인해 충돌이 발생할 수 있음.

해당 이슈 문서 

https://docs.soliditylang.org/en/v0.8.17/abi-spec.html?highlight=collisions#non-standard-packed-mode 

 

Deposit 함수에는 사용자가 _string1 및 _string2 라는 두개의 문자열 입력을 기반으로 계약에 이더를 예치할 수 있음.

계약은 이 두 문자열을 연결하여 고유한 해시를 생성하기 위해 keccak256 함수를 사용함.

 

_string1 및 _string2 의 두가지 다른 조합이 동일한 해시값을 생성하는 경우 해시 충돌이 발생함

이 코드는 이러한 시나리오를 제대로 처리하지 않고 두번째 예금자가 이전 예금을 덮어 쓸 수 있도록 허용함.

 

조치방안

abi.encodePacked() 대신에 abi.encode() 사용.

 

테스트코드

https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Hash-collisions.sol

 

 

코드취약부분

 

테스트

 

참고문헌

https://web3sec.notion.site/abi-encodePacked-Hash-Collisions-80a0ff1e17d74f86bfd1290d6e156400

🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑

  1. 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
  2. 아무도 알려주지 않은 비트코인, 이더리움의 리스크
  3. 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
  4. 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
  5. 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!

댓글