Rust 프로그래밍 언어의 컴파일러에서 약 11년간 방치된 메모리 안전성 관련 결함이 공식적으로 확인되었습니다. 해당 이슈는 GitHub의 rust-lang/rust 저장소 Issue #164250으로 등록되었으며, 현재 커뮤니티와 개발팀의 주목을 받고 있습니다.
발견된 버그는 공변적 필드 할당과 커스텀 Drop 구현을 결합하여 구조체의 수명 요구사항을 우회하는 방식입니다. 이를 통해 참조가 실제 수명을 벗어나 지속될 수 있으며, AddressSanitizer를 통해 use-after-scope 오류가 검증되었습니다.
재현 코드는 정적 Mutex에 Box
이 문제는 최소 Rust 1.4 버전부터 존재했던 것으로 추정됩니다. 일부 논의에서는 1.18.0 버전까지 거슬러 올라갈 가능성도 제기되었으나, 명확한 최초 발생 시점은 추가 조사가 필요합니다.
Rust 타입 시스템 팀은 이 결함을 P-high 우선순위로 지정했습니다. unsafe 블록 없이 안전한 코드만으로도 메모리 손상이 발생할 수 있다는 점이 주요 원인입니다. 이는 Rust가 약속하는 메모리 안전성에 대한 신뢰도를 흔드는 사안으로 간주됩니다.
해결책은 타입 시스템 자체의 변경이 아닌 컴파일러 로직 수정에 집중되어 있습니다. 수명 규칙에 따라 해당 코드를 거부하도록 컴파일러를 조정하면 됩니다. 따라서 근본적인 언어 설계 변경보다는 구현 단계의 버그 수정으로 접근하고 있습니다.
현재 Rust 저장소에는 unsound 태그가 붙은 이슈가 100개 이상 남아 있습니다. 새로운 trait solver 도입이 일부 장기 미해결 문제들의 해결을 돕고 있지만, 이번 사례처럼 복잡한 수명 우회 문제를 완전히 차단하기까지는 시간이 걸릴 전망입니다.
실제 라이브러리나 애플리케이션에서 이 버그로 인한 사고가 보고된 사례는 아직 공개되지 않았습니다. 다만 컴파일러가 허용하던 코드가 향후 업데이트에서 거부될 경우, 기존 프로젝트의 빌드 실패 가능성이 남아 있습니다.
