🔑 코인 투자 추천 링크 🔑
안전하지 않은 Delegate Call 취약성
Proxy 계약 소유자 조작 취약점은 스마트계약 설계에서 발행하는 결함으로, 공격자가 Proxy 계약의 소유자를 조작할 수 있는 문제임.
이 취약점은 Proxy 계약의 fallback 함수에서 delegatecall을 사용함으로써 발생 함.
delegatecall은 공격자가 proxy 계약의 컨텐스트 내에서 delegate 계약의 pwn()함수를 호출할 수 있게 해주므로,
Proxy 계약의 소유자 상태 변수값을 변강할 수 있음.
이로써 스마트계약은 런타임시 다른 주소에서 코드를 동적으로 로드할 수 있게 됨.
시나리오
Proxy 계약은 사용자가 로직 계약을 호출하는데 도움을 주기 위해 설계 됨.
Proxy 계약의 소유자는 0xdeadbeef로 하드코딩되어 있음
개선방법
Proxy 계약 소유자 조작 취약점을 완하하려면 delegatecall이 명시적으로 필요하지 않은 경우에는 사용을 피하고, delegatecall을
안전하게 사용하는 것을 보장해야 함.
만약 delegatecall이 계약의 기능에 필요하다면, 예상치 못한 동작을 피하기 위해 입력값을 검증하고 정리하는 것이 중요함.
테스트 소스파일
https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Delegatecall.sol
테스트 결과
참고자료
https://web3sec.notion.site/Unsafe-Delegatecall-91fd2b6058114740999661dc817d627c
댓글