🔑 코인 투자 추천 링크 🔑
ecRecover가 address(0)을 반환하는 문제
SimpleBank 계약에서 transfer 함수는 매시지 해시와 서명(v,r,s 값)을 입력으로 받음.
이 함수는 서명을 복구하여 서명한 주소를 얻은 다음 이 주소가 관리자(admin)와 같은지 확인함
취약점은 ecRecover 함수가 서명 매개변수가 잘못된 경우에 0x0주소를 반환할 수 있다는 점
만약 v값이 27이나 28이 아닌 경우에도 0x0 주소를 반환할 것임
조치방안
Ecrecover 함수의 결과가 0이 아닌지 확인하거나 대신 openzeppelin의 ECDSA라이브러리를 사용
테스트소스
https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/ecrecover.sol
코드취약성
테스트
참고문헌
https://web3sec.notion.site/ecRecover-returns-address-0-a97e7c73079642a9919e9a0511da94c5
댓글