기술

Ubuntu 26.04, Rust sudo를 기본값으로 채택 — 46년 C 취약점 클래스의 종식

Adrian Kessler

2026년 4월 출시된 Ubuntu 26.04 LTS는 시스템 수준 접근을 제어하는 도구인 sudo의 기본 구현체로 sudo-rs를 채택했다. 사용자나 프로세스가 소프트웨어 설치, 시스템 파일 수정, 루트 권한으로 서비스 실행 등 상승된 권한이 필요할 때 sudo가 게이트키퍼 역할을 한다. 기존 버전은 C로 작성되었지만, sudo-rs는 Rust로 완전히 다시 구현된 버전이며, 이제 전 세계에서 가장 널리 사용되는 리눅스 배포판에서 기본으로 제공된다.

원조 sudo는 1980년에 작성되었다. 그동안 C 코드베이스에는 기능과 함께 또 다른 것이 쌓였다. 바로 메모리 관리 취약점 계열로, Rust는 이를 컴파일러 수준에서 제거한다. 가장 대표적인 사례는 Baron Samedit으로 명명된 CVE-2021-3156이다. 이 취약점은 약 10년간 발견되지 않았으며, 모든 주요 리눅스 배포판에서 로컬 권한 상승을 허용했다. 일반 사용자 계정으로 로그인한 공격자가 루트 권한을 획득할 수 있었다. Canonical은 공개 후 24시간 이내에 패치를 적용했지만, 이 취약점을 가능하게 한 구조적 조건—C의 수동 메모리 관리—은 패치되지 않았다.

Rust가 바꾸는 것은 코드 작성 방식이 아니라, 어떤 종류의 버그가 존재할 수 있느냐다. 버퍼 오버플로, use-after-free 오류, 널 포인터 역참조는 Rust가 컴파일 시점에 제거하는 취약점 범주에 속한다. 컴파일러가 이러한 패턴을 가진 코드를 실행 전에 거부한다. 권한 상승을 처리하는 소프트웨어에게 이는 위협 모델에서 제거할 수 있는 중요한 제약 조건이다.

sudo-rs는 2023년에 완전한 독립 보안 감사를 완료했다. 이 프로젝트는 C 구현과 성능 동등성을 달성했다. Canonical은 이전 Ubuntu 버전에서 선택 사항으로 제공하기 시작했으며, 26.04에서 기본값으로 전환했다. 이 단계적 접근 방식은 실패 시 시스템 접근을 차단하거나 공격자를 루트로 승격시킬 수 있는 도구를 교체하는 데 적합한 신중함을 반영한다.

Ubuntu 26.04는 uutils coreutils도 함께 제공한다. 이는 ls, cat, mv 등 기본 도구를 Rust로 다시 구현한 것이다. 그러나 cp, mv, rm은 이번 릴리스에서 GNU C 구현으로 남아 있다. Canonical의 설명에 따르면, 해당 Rust 구현의 TOCTOU 경쟁 조건은 데이터 파괴 위험을 수반하며, 팀은 LTS 릴리스에는 그 위험이 너무 높다고 판단했다. 이 단계적 출시는 ‘그냥 Rust로 다시 작성하자’는 접근법에 대한 솔직한 반성을 드러낸다. 도구는 존재하지만, 마이그레이션은 포괄적인 전환이 아니라 사례별 안전성 분석을 요구한다.

리눅스 커널은 2022년부터 Rust 드라이버 코드를 받아들이기 시작했다. Android 팀은 2021년부터 새로운 시스템 코드에 Rust를 사용해 왔다. Microsoft는 메모리 민감 Windows 구성 요소를 Rust로 다시 작성했다. Canonical이 sudo-rs를 기본값으로 만든 것은 새로운 드라이버나 선택적 구성 요소의 실험이 아니라, 시스템 접근을 위한 인증 계층을 모든 새 Ubuntu 설치에 기본으로 제공한다는 점에서 의미 있는 이정표다.

Baron Samedit을 만들어낸 CVE 패턴은 이 구성 아래 Ubuntu 사용자에게 끝난다. 다른 주요 배포판들—Debian, Red Hat, Fedora, Arch—이 Ubuntu의 sudo-rs 기본 전환을 따를지가 이 변화의 규모를 결정한다. sudo-rs는 그들 모두에서 사용 가능하다. Canonical은 감사 결과가 충분하다고 판단했다. 다음 결정은 다른 유지보수자들의 몫이다.

태그: , , , , ,

토론

댓글 0개가 있습니다.