Rust 빌림 검사기의 11년 미해결 심각한 결함 발견
원제 11 year old unsoundness bugs found in Rust borrow checker
172 포인트댓글 58
Key Point
Rust의 메모리 안전성 보장을 무너뜨리는 심각한 컴파일러 결함이 11년간 미발견이었으므로, 현재 Rust 코드의 안전성이 영향을 받을 수 있다.
핵심 요약
- Rust의 빌림 검사기에서 공변 필드 할당을 통해 구조체의 생명주기 제약을 우회하는 결함이 발견됐다.
- 타입이 'static 경계를 요구하지만, 필드에 할당할 때는 이 제약이 검사되지 않아 짧은 생명주기의 참조를 'static 참조로 위장할 수 있다.
- Drop 구현부에서 컴파일러가 보장하지 않은 'static 생명주기를 가정하고 코드를 실행하면 해제된 메모리 접근(use-after-free) 및 스택 메모리 접근 오류가 발생한다.
- Rust 1.85.0 이상의 안정 버전과 nightly에서 현재까지 해결되지 않았으며, 1.4 버전(2015년)부터 존재하던 것으로 확인됐다.
- 필드 할당 시 타입 유니피케이션이 생명주기 경계를 검사하지 않는 것이 근본 원인이며, 여러 변형 사례가 보고됐다.
- 현재 P-high(높은 우선순위)로 분류되어 Rust 타입 팀의 검토를 기다리고 있다.