codehawks-2023-07-dsc-l04
[L-04] Pragma isn’t specified correctly which can lead to nonfunction/damaged contract when deployed on Arbitrum
Summary
Arbitrum 에서는 아직 solidity 0.8.20 이상을 지원하지 않는다. 컴파일러 버전을 명시적으로 지정하여 0.8.20 이상 버전을 이용하지 않도록 한다.
Keyword
solidity, pragma, compiler, arbitrum, evm
Vulnerability
EVM 호환 체인 중 Arbitrum은 아직 solidity 0.8.20 이상과 호환되지 않는다. 아직 push0이 지원되지 않기 때문이다. Arbitrum docs 참고
프로토콜에서는 pragma solidity ^0.8.18; 로 solidity 컴파일러 버전을 지정했다. 이는 0.8.18 버전 이상이라는 의미로, 0.8.20 컴파일러를 이용할 수도 있다.
foundry.toml에서는 어떤 solidity 버전을 이용할 지 명시되어 있지 않고, 이 프로젝트는 포트될 예정이며 모든 EVM 호환 체인에 배포될 예정이라 하였다. 따라서 floating pragma를 이용하는 대신 명시적으로 컴파일러를 지정하는 게 좋다.
Impact
Arbitrum 체인에 배포 시 컨트랙트가 작동하지 않는다.
Mitigation
solidity 버전을 명시적으로 제한한다.
pragma solidity >=0.8.0 <=0.8.19Memo
지원 전까지는 써먹을 수 있겠다.
tags: bughunting, codehawks, smart contract, solidity, solidity pragma, compiler, arbitrum chain, severity low