📢 대니월드 공식 홈페이지가 'TradingRoom'으로 변경되었습니다
모든 최신 시황과 교육 자료를 가장 빠르게 받는 방법!
지금 아래 버튼을 클릭해 이메일 구독을 완료해 주세요.
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
댓글