🔑 100배 수익 경험자의 노하우가 담긴 치트키 공개 🔑
- 네이버, 카카오 임직원들이 듣고 있는 비트코인 강의
- 아무도 알려주지 않은 비트코인, 이더리움의 리스크
- 블록체인 전문가들도 놓치기 쉬운 비트코인, 이더리움의 핵심 가치
- 천배 수익이 가능한 디파이(DeFi), 코인 생태계 지도
- 토큰 제작, 1억 연봉의 블록체인 개발자로 거듭나자!
구조체 삭제 간과
불완전한 구조체 삭제는 잔여 데이터를 남기게 됨.
매핑을 포함하는 구조체를 삭제하더라도 해당 매핑은 삭제되지 않음.
이 버그는 솔리디티의 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
댓글