최근 개발자 커뮤니티를 뜨겁게 달구고 있는 주제는 바로 ‘Rust 가 놓친 버그’에 대한 이야기입니다. 보통 Rust 는 메모리 안전성을 보장하는 만능 열쇠처럼 여겨졌지만, 2026 년 4 월 Canonical 이 공개한 uutils 프로젝트의 감사 보고서가 이 믿음에 균열을 냈습니다. 이 보고서에는 GNU 코어유틸리티의 Rust 재구현 버전인 uutils 에서 발견된 44 개의 CVE 취약점이 담겨 있었습니다. 흥미로운 점은 이 버그들이 모두 숙련된 개발자들이 작성한 코드에 존재하면서도, Rust 의 대표적인 안전 장치인 보로우 체커나 클리피 린트, 그리고 카고 오디트를 통과했다는 사실입니다.
이 현상이 주목받는 이유는 Rust 의 안전성이 절대적이지 않다는 것을 보여주기 때문입니다. 대부분의 취약점은 경로 확인과 실제 동작 사이에 발생하는 시간 차, 즉 TOCTOU(Time-of-check-time-of-use) 경합 문제에서 비롯되었습니다. 예를 들어, 파일의 속성을 확인하는 시스템 호출과 파일을实际操作하는 호출 사이에 공격자가 심볼릭 링크를 교체하면, Rust 의 표준 라이브러리가 경로를 매번 다시 해석하는 특성상 예상치 못한 파일이 조작당할 수 있습니다. 이는 Rust 의 문법적 안전성이 운영체제 수준의 시나리오까지 완벽하게 커버하지 못함을 시사합니다.
개발자들 사이에서는 이에 대한 반응이 엇갈립니다. 일부는 Rust 표준 라이브러리가 파일 디스크립터를 기반으로 한 API 를 더 많이 지원해주길 바라며, 유닉스 API 의 깊은 이해가 필요하다는 점을 강조합니다. 반면, 실제 성능 테스트에서는 Rust 버전의 복사 명령어가 기존 GNU 버전보다 훨씬 느리게 작동하는 사례도 발견되어, 안전성과 성능 사이의 트레이드오프에 대한 논의도 함께 일고 있습니다. 특히 대규모 디렉토리 구조를 다룰 때 발생하는 성능 저하는 실용적인 관점에서 큰 이슈가 됩니다.
앞으로 주목해야 할 점은 Rust 생태계가 이러한 시스템 프로그래밍의 함정을 어떻게 극복해나갈지입니다. 단순히 언어적 안전성에만 의존하기보다, 운영체제의 동작 원리를 더 깊이 반영한 API 개선이 이루어질지, 혹은 개발자들이 수동으로 경합 조건을 방어하는 코드를 더 많이 작성하게 될지가 관건입니다. 이번 사건은 Rust 가 시스템 프로그래밍의 새로운 표준으로 자리 잡는 과정에서 겪는 필수적인 성장통으로 해석할 수 있으며, 앞으로의 업데이트 방향을 지켜보는 것이 중요합니다.