사실 Call Attack이라는 이름은 그냥 붙인 것 같고, 전반적으로 발생할 수 있는 실수들에 대해 몇 가지 소개가 되어 있다.delegate call을 할 때 호출할 contract의 storage layout에 대해 신경쓰지 않으면 변수가 덮어써질 위험이 있다.더
SCH 강의에서 나온 2가지의 사례를 짧게 정리해보고자 한다.만약 Oracle이 centralized되어 있다면 문제가 될 수 있다.이 경우에 대해서 나는 당연히 고려를 하지 않았는데, 생각보다 실제 사례가 있었다.예를 들어 하나의 admin account에서 api를
Solidity에서 Low-level call을 하였을 때, return value를 check하지 않을 경우 문제가 생길 수 있는 경우들이 있다.ERC20 approve과 front running - increaseAllowance(), decreaseAllowanc
ERC20 코드를 분석하다가, type() 에 대해서 항상 궁금해만 하다가 이번에 공식 문서에서 찾아보았다.https://docs.soliditylang.org/en/v0.8.17/units-and-global-variables.htmlThe expressio
low-level call은 보통 다음과 같이 작성된다.data에는 bytes의 형태로 return된 값이 저장되게 된다.근데 만약 revert가 나면 어떻게 될까?뭔가 return이 되기는 한다. 한번 분석해보자.bytes 혹은 string 타입의 경우 calldat
출처 - https://www.adrianhetman.com/unboxing-erc20-approve-issues/Openzeppelin의 SafeERC20 라이브러리를 읽어보다가 아래 코멘트를 읽고 해당 issue에 대해 조사해 보았다.ERC20 standa
원래는 ethers.js의 getStorageAt()을 사용하는 방법만 알고 있었는데, foundry의 cast를 사용하면 훨씬 간편하게 deploy된 contract의 storage를 읽어올 수 있다. https://book.getfoundry.sh/referenc
Smart Contract에서 DoS 공격은 기본적으로 해당 컨트랙트가 정상적으로 작동하지 않도록 고장을 나게 하는 공격이다.기본적으로 owner가 아닌 주소를 등록했을 때, 해당 주소와 external한 interaction이 있을 때 발생하는 문제이다.아래의 예시들
https://www.rareskills.io/post/eip-150-and-the-63-64-rule-for-gasexternal call이 발생하면 (CALL, STATICCALL, DELEGATECALL) 해당 externall call에서 사용되기 위한
다음과 같이 토큰을 전송하고 callback 함수를 부른다.뭐가 문제일까?flash loan pool 컨트랙트에다가 대출금을 보낸다(그럼 pool의 balance가 변하지 않음)target을 대출할 token contract로 설정해놓고,얘를 보내게 하면?flash l
일반적으로 Flash Loan이나 Flash Swap의 매커니즘 자체는 복잡할 것이 없지만, 실제 코드를 구현하는 것은 또 다른 느낌이기에 해당 둘의 인터페이스를 간단하게 정리해보고자 한다.얼핏 보기에는 돈달라고 호출callback 함수에서 fee를 붙여서 상환하면 될
SCH Course의 Replay Attak 파트들을 풀어나가면서 배웠던 내용들을 정리해보고자 한다.2명의 지정된 signer가 서명한 off-chain 서명으로만 인출할 수 있는 Multisig Wallet에서 정상적인 방식으로 attacker가 1 ETH를 출금한다
출처: https://book.getfoundry.sh/tutorials/testing-eip712Replay Attack에 대해 알아보다가, 정말 많은 것을 찾아보았다.혹 EIP-712나 Off-Chain 서명에 대해 낯설다면 아래의 글들을 쭉 정독해보기 바
Uniswap V2의 ERC20Permit과 같은 함수들에 대한 표준이 있어서, 한번 정리해본다.ERC-20 20에 대한 성공 요인을 approve와 transferFrom이라고 하고 있다.이를통해 msg.sender를 추상화해서 (msg.sender가 직접 콜하지 않
: EIP-712는 단순한 바이트스트링이 아닌 형식화된 구조물을 해싱하고 서명하기 위한 표준입니다.인코딩 함수의 정확성을 위한 이론적인 프레임워크Solidity 구조체와 유사하고 호환 가능한 구조화된 데이터의 명세이러한 구조체 인스턴스를 위한 안전한 해싱 알고리즘서명
: ERC-191은 이더리움에서 signed data를 어떻게 다룰 것인지에 대한 표준 정의이다.(2016년 기준) Presigned transaction을 accept하는 Multisignature wallet의 implementation들이 나오게 되었다.이러한 s
항상 OZ의 ECDSA라이브러리를 사용하라는 얘기만 들었고 코드를 볼때마다 항상 뭔가가 조금 아리송 해서, 이번 기회에 싹 정리를 해보려고 한다.역시 OZ라그런지... CustomError로 정의하지를 않고 enum으로 정의하는 새로운 패턴을 알게되었다.기본적으로 tr
항상 허겁지겁 많은 양을 학습하느라 정신이 없었어서 씹지를 않고 삼켰더니 제대로 정보들이 소화가 되지 않는 듯한 기분이 들어서 오늘부터 매일 짤막하게나마 학습한 내용들을 정리하고자 한다.Looksrare의 Medium risk finding들을 읽어가면서 노션에 정리했
그 유명한 Cmichel이 report한 Sandwich Attack의 issue 페이지 링크를 읽다가 의문을 해소하고자 정리한다.https://github.com/code-423n4/2021-09-bvecvx-findings/issues/57Sandwich