📢 대니월드 공식 홈페이지가 'TradingRoom'으로 변경되었습니다
모든 최신 시황과 교육 자료를 가장 빠르게 받는 방법!
지금 아래 버튼을 클릭해 이메일 구독을 완료해 주세요.
구조체 삭제 간과
불완전한 구조체 삭제는 잔여 데이터를 남기게 됨.
매핑을 포함하는 구조체를 삭제하더라도 해당 매핑은 삭제되지 않음.
이 버그는 솔리디티의 delete 키워드가 스토리지를 초기 상태로 재설정하지 않고 부분적인 초기화를 수행하기 때문에 발생함.
Delete myStructs[structId]가 호출되면 이는 매핑 내의 id 만 기본값인 0으로 재설정하지만, 매핑 내의 다른 플래그는 변경되지 않음. 따라서 구조체 내부의 매핑을 삭제하지 않고 구조체를 삭제하면 남아 있는 플래그라 스토리지에 계속 남게 됨.
조치
이 버그를 수정하려면 구조체 자체를 삭제하기 전에 구조체 내부의 매핑을 삭제해야 함.
테스트소스
https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/Struct-deletion.sol
코드 취약성

테스트

참고문서
https://web3sec.notion.site/Struct-Deletion-Oversight-9b284e93d26a424f8c43d191c9a85c94
댓글