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

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.0

참고

Impact

floating pragma를 이용해 원하던 것보다 더 높은 버전의 컴파일러를 이용하게 되면 의도하지 않은 일이 발생할 수 있다.

Mitigation

라이브러리나 인터페이스 소스코드가 아닌 코드는 고정된 컴파일러 버전을 이용한다.


tags: bughunting, nouns dao, smart contract, solidity, solidity pragma, compiler, severity none