-
Opensea: Wyvern v2.2 컨트랙트 로직 및 취약점 분석
Introduction 오늘은 오픈씨가 이전에 사용하던 Wyvern 프로토콜의 로직과 취약점을 살펴보겠다. Wyvern 프토콜은 EIP712 이전에 개발된 프로토콜이기 때문에 예상치 못한 취약점들이 존재하였다. 이전 블로그글 지갑 데이터 서명(Signature)과 EIP712에서 EIP712의 역할을 상기하며 Wyvern 프로토콜이 어떤 문제점을 갖고 있었는지를 확인해보자. 본 글은 CTO of Opensa: A critical vulnerability in Wyvern Protocol와 Haechi Audit: Wyvern v2.2 1-day Vulnerabilities를 주로 참고하였다. Wyvern v... Read More
-
지갑 데이터 서명(Signature)과 EIP712
Introduction 메타마스크를 사용하다보면 Web3 홈페이지에서 메타마스크를 통해 로그인을 수행하거나, 오픈씨와 같은 NFT 거래소에서 NFT를 사고 팔 때 아래 사진과 같은 서명 요청을 받은 경험이 많을 것이다. 여러 사이트에서 서명을 하다 보면 괜스래 어떤 보안 위협이 생기지는 않을까하는 막연한 두려움이 몰려오게 된다. 또한, 어떤 곳은 서명 요청 시 아래 Figure 2 사진처럼 메시지 내용 안에 특정 해시 값만 보여주는 반면, Figure 1 사진처럼 오픈씨와 같이 Offerer, Token 값 등 다양한 데이터를 세부적으로 보여주는 곳이 있다. 오늘은 이러한 서명 방식의 차이들을 알아보고 오픈씨에서 ... Read More
-
Solidity 공부 자료 리스트 A to Z
이번 포스팅에선 솔리디티(Solidity)를 공부하기 위해서 어떠한 자료들을 보면 좋을지 정리해봤습니다. 대부분 제가 직접 본 자료들을 선별하였으며, 제가 추후 보기 위해 정리한 자료들도 일부 포함되어 있습니다. 추후 계속해서 자료 링크를 추가하도록 하겠습니다. Solidity 입문자들을 위한 공부 자료 [도서] 마스터링 이더리움 [도서] 솔리디티 프로그래밍 완벽 가이드 솔리디티 공식 Docs All-About-Solidity All-About-Data-Location All-About-Storage All-About-Memory All-Abou... Read More
-
스마트 컨트랙트에서의 Merkle Proof 사용
Introduction NFT 프로젝트에서 화이트 리스트 명단만 NFT 민팅이 가능하게 만드는 시나리오처럼, 특정한 주소 리스트들만 함수를 실행할 수 있도록 스마트 컨트렉트를 작성하려면 어떻게 해야할까? 이더리움의 저장 공간과 비용에 제약이 없다면 모든 주소 리스트들을 Storage에 매핑 형태로 저장한 후, 트랜잭션 요청 시 msg.sender가 매핑 값을 갖는지 확인하는 것이 하나의 방법일 것이다. 하지만 이더리움 네트워크는 수 많은 컴퓨터가 상태를 공유하는 월드 컴퓨터로서, 이러한 월드 컴퓨터에 데이터를 저장하는 것은 많은 비용이 소모된다 (32 bytes의 word를 저장하는 것은 통상적으로 20,000 g... Read More
-
Foundry를 통한 스마트 컨트랙트 테스트
Foundry 기존의 스마트컨트렉트 개발은 Truffle, hardhat 등의 툴을 사용하여 개발을 하였습니다. 특히 테스트를 위해선 Hardhat을 통하여 많이 진행했는데, Paradim에서 개발한 Foundry가 이러한 테스트에 새로운 대안으로 등장하였습니다. Foundry는 쉽게 설명하자면 Solidity 언어를 Solidity로 테스트 가능하게 도와주는 툴입니다. 기존의 툴들을 통해 테스트를 진행하기 위해서는 테스트 코드를 Javascript 혹은 Typescript로 작성해야했기 때문에 많은 의존성과 config들이 필요하였습니다. C언어를 javascript로 테스트한다고 개발자들에게 말하면 비웃음을... Read More
-
Magic Dragon DAO 업그레이드 컨트랙트 Audit
Magic Dragon DAO 이전 포스팅에서 작성한 MDD 취약점 발견 이후 약 2주가 지난 시점에서 새로운 코드가 업데이트 되었다. 저번 문제점을 발견한데 도와준만큼, 해당 코드의 개발자인 kvk0x가 peer review를 요청하게되었고 이번 audit을 도와주게 되었다. 이번 포스팅에선 변경 사항들을 살펴보고 peer review 내용을 공유하고자 한다. 우선 이번 패치 사항은 Github 해당 링크에서 확인할 수 있으며, 구체적인 구현 사항은 Medium 글을 따라 구현되었다. 주요 변경점을 살펴보자면 다음과 같다. 보상이 실시간으로 누적되지 않고, 2. 3. 코드가 변경된 부분은 ... Read More
-
Magic Dragon DAO 취약점 분석
Magic Dragon DAO 최근 이더리움 L2 체인인 아비트럼 네트워크의 거래 TX수가 증가하면서 전체적인 네트워크의 가스비가 증가하였다. 이로 인해, MagicDragonDAO의 스테이킹 풀에서 발생했던 취약점을 분석하고 설명해보고자 한다. 간단히 MDD에 대해 설명하자면, Convex 프로토콜이 Curve 프로토콜에서 개인보다 나은 CRV 토큰 수확량을 얻기 위해 집단적으로 스테이킹하도록 설계된 것처럼, MDD는 TreasureDAO의 MAGIC 스테이킹 풀에서 개인보다 나은 최대한의 MAGIC 수확량을 얻기 위한 길드이자 프로토콜이다. 따라서 MDD의 스테이킹 풀은 개인의 MAGIC 토큰들을 모아서 Tr... Read More
-
기존 Treasure NFT Marketplace 취약점 분석
Treasure NFT marketplace 이전 TreasureDAO NFT 마켓플레이스를 예전에 분석했던 경험과, 이때 찾았던 취약점을 말해보고자 한다. 또한, 2022년 3월초에 실제로 해당 마켓플레이스 NFT 자산들이 탈취된 공격에 대해 설명해보고자 한다. 기존 마켓플이스의 전체 코드는 Arbiscan에서의 Contract에서 확인해볼 수 있다. 우선 내가 처음 파악했던 문제점은 NFT를 리스팅 할 때 ERC721과 ERC1155에 대한 quantity 체크를 명확히 하지 않는 부분에 있다. 아래 코드를 보자. function createListing( address _nftAddress... Read More