Rust 보로우 체커서 11년간 잠복한 취약점 발견
원제: 11 year old unsoundness bugs found in Rust borrow checker
왜 중요한가
Rust의 핵심 보안 보증인 메모리 안전성이 safe 코드만으로 깨질 수 있다는 점에서 시스템 프로그래밍 생태계 전반에 영향을 미친다.
2025년 10월 13일, 'jsnell'이 GitHub Issue #164250을 통해 Rust 보로우 체커의 심각한 건전성(soundness) 버그를 공개했다. 구조체의 공변(covariant) 필드 할당을 통해 라이프타임 요건을 우회할 수 있는 이 결함은 최소 11년간 Rust에 잠재해 있었으며, P-high(높은 우선순위)로 분류됐다.
Rust의 타입 시스템은 메모리 안전성 보장을 핵심 약속으로 내세운다. 이번에 공개된 Issue #164250은 그 약속에 정면으로 배치되는 버그다. 구조체의 공변 필드에 값을 할당하는 과정에서 보로우 체커가 라이프타임 제약을 올바르게 검사하지 않아, 이론적으로 메모리 안전성이 깨지는 코드가 컴파일러를 통과할 수 있다.
이 취약점은 'I-unsound(건전성 결함)' 레이블을 받았다. Rust 프로젝트에서 unsound 버그는 가장 심각한 카테고리로, 안전한 코드(safe code)만으로 undefined behavior를 유발할 수 있음을 의미한다. 해당 이슈는 A-borrow-checker, A-lifetimes, A-variance 등 여러 핵심 레이블이 함께 붙었다.
Rust Types 팀은 이슈 본문에 추가 맥락을 직접 기재했다. 팀은 차세대 trait solver, region constraint 재설계, Project Zero 등 타입 시스템 건전성 강화 작업이 이미 진행 중이라고 밝혔다. 또한 이 버그는 실제 악용 사례 보고 여부와 무관하게 P-critical로 다뤄질 만한 수준이라고 평가했다.
해당 버그가 정확히 언제 도입됐는지 명시되진 않았으나, 제목에서 '11년'이라는 기간이 언급된다. Rust 1.0 안정화(2015년) 이전부터 존재했을 가능성이 있는 셈이다. 현재 이슈는 오픈 상태로, 수정 PR은 아직 병합되지 않았다.