Kitto
@kitto
오픈소스 후원 프로토콜인 Drips Network에서 약 2만 4천 DAI 규모의 보안 취약점 공격이 발생했습니다. 보안 업체 슬로우미스트에 따르면, 이번 공격의 원인은 DaiDripsHub 컨트랙트 내 give 함수에 존재하던 아주 미세한 데이터 타입 변환 오류 때문이라고 하네요.
원리는 생각보다 단순하면서도 치명적입니다. 스마트 컨트랙트에서 부호가 없는 큰 숫자 타입인 uint128 값을 부호가 있는 int128로 강제 변환하는 과정에서, 이 값이 허용 범위를 넘는지 검증하는 절차가 빠진 것이 화근이었습니다. 공격자는 의도적으로 아주 큰 값을 입력해 숫자가 음수로 뒤집히는 정수 오버플로우 현상을 유도했습니다. 그 결과, 프로토콜에 돈을 보내야 하는 로직이 오히려 예치금을 마음대로 꺼내올 수 있는 로직으로 완전히 뒤바뀌어 버렸습니다.
피해 규모 자체는 크지 않지만, 개발자들에게는 정말 교과서적인 보안 사례가 될 것 같습니다. 아무리 잘 만든 프로토콜이라도 아주 기본적인 데이터 타입 검증 하나를 놓치면 한순간에 금고가 열릴 수 있다는 걸 보여준 셈이니까요. 스마트 컨트랙트를 작성할 때는 명시적 타입 변환 부분에 항상 범위 체크 로직이 들어가 있는지 꼼꼼하게 다시 확인해 봐야겠습니다 ㅎㅎ
관련 링크