code4rena-2022-08-nounsdao-n09
[N‑09] Non-library/interface files should use fixed compiler versions, not floating ones
Summary
라이브러리나 인터페이스 소스코드가 아닌 코드에는 고정된 컴파일러 버전을 이용하는 것이 좋다. floating pragma를 이용해 원하는 것보다 더 높은 버전의 컴파일러를 이용하게 되면 의도하지 않은 일이 발생할 수 있다.
Keyword
solidity, pragma, compiler
Vulnerability
- contracts/governance/NounsDAOInterfaces.sol#L33
- contracts/governance/NounsDAOLogicV1.sol#L61
- contracts/governance/NounsDAOLogicV2.sol#L53
- contracts/governance/NounsDAOProxy.sol#L36
File: contracts/governance/NounsDAOInterfaces.sol
33: pragma solidity ^0.8.6;
File: contracts/governance/NounsDAOLogicV1.sol
61: pragma solidity ^0.8.6;
File: contracts/governance/NounsDAOLogicV2.sol
53: pragma solidity ^0.8.6;
File: contracts/governance/NounsDAOProxy.sol
36: pragma solidity ^0.8.6;라이브러리나 인터페이스 소스코드가 아닌 코드는 고정된 컴파일러 버전을 이용하는 것이 좋다.
참고로 다음은 Solidity 컴파일러 버전 명시 방법이다. floating pragma는 ^0.6.12 와 같이 쓰는 것을 의미한다. floating pragma를 이용해 원하던 것보다 더 높은 버전의 컴파일러를 이용하게 되면 의도하지 않은 일이 발생할 수 있다.
pragma solidity 0.6.12 - Only compiles with version 0.6.12
pragma solidity ^0.6.12 - Compiles with version 0.6.12 and above
pragma solidity >=0.4.0 <0.6.0 - Compiles with all versions between 0.4.0 and 0.6.0Impact
floating pragma를 이용해 원하던 것보다 더 높은 버전의 컴파일러를 이용하게 되면 의도하지 않은 일이 발생할 수 있다.
Mitigation
라이브러리나 인터페이스 소스코드가 아닌 코드는 고정된 컴파일러 버전을 이용한다.
tags: bughunting, nouns dao, smart contract, solidity, solidity pragma, compiler, severity none