技術

Ubuntu 26.04將Rust sudo設為預設,終結46年C語言漏洞類別

Adrian Kessler

Ubuntu 26.04 LTS,於 2026 年 4 月釋出,正式將 sudo-rs 設為控制 Linux 系統層級存取權限工具的預設實作。當使用者或程序需要提升權限——安裝軟體、修改系統檔案、以 root 身分執行服務——sudo 就是那道閘門。原始版本以 C 語言撰寫。sudo-rs 則是以 Rust 完全重新實作的版本,如今已成為全球最廣泛使用的 Linux 發行版之預設配置。

原始的 sudo 寫於 1980 年。在那段時間裡,C 語言的程式碼庫除了功能之外,也累積了另一樣東西:一類記憶體管理漏洞,而 Rust 能在編譯器層級消除這類問題。最顯著的是 CVE-2021-3156,名為 Baron Samedit。該漏洞潛伏了大約十年,讓每個主要 Linux 發行版都能遭受本機權限提升攻擊。擁有非 root shell 帳號的本機攻擊者可以變成 root。Canonical 在漏洞揭露後 24 小時內修補了它。但允許此漏洞存在的架構性條件——C 語言的手動記憶體管理——並未因此被修補。

Rust 改變的不是程式碼的寫法,而是哪些類型的錯誤可能存在於其中。緩衝區溢位、釋放後使用錯誤、以及空指標解引用,這些都是 Rust 在編譯階段就能消除的漏洞類別——編譯器會在程式執行前拒絕含有這些模式的程式碼。對於一個處理權限提升的軟體來說,這等於是從威脅模型中移除了一項重大的限制條件。

sudo-rs 在 2023 年完成了完整的獨立安全稽核。該專案已達到與 C 實作相同的效能水準。Canonical 在更早的 Ubuntu 版本中就已將其作為選項提供,直到 26.04 才設為預設。這種分階段的做法反映了對更換這類工具的謹慎態度——如果它出錯,可能導致使用者無法存取系統,或讓攻擊者提升為 root。

Ubuntu 26.04 也搭載了 uutils coreutils——以 Rust 重寫的基礎工具,包括 ls、cat 和 mv。但 cp、mv 和 rm 在此版本中仍保留 GNU C 實作。Canonical 的理由是:這些 Rust 實作中的 TOCTOU 競爭條件可能導致資料毀損,團隊認為對 LTS 版本而言風險過高。這種分階段部署揭露了「直接用 Rust 重寫」這個做法背後的誠實面:工具已經存在,但遷移需要逐案進行安全分析,而非全面切換。

Linux 核心自 2022 年起開始接受 Rust 驅動程式碼。Android 團隊自 2021 年起已將 Rust 用於新的系統程式碼。微軟也已用 Rust 重寫了記憶體敏感的 Windows 元件。Ubuntu 將 sudo-rs 設為預設,是一個重要的里程碑,因為這不是新驅動程式或選用元件的實驗——這是系統存取的驗證層,預設出貨給每一個新的 Ubuntu 安裝。

產生 Baron Samedit 的 CVE 模式,在此配置下對 Ubuntu 使用者而言就此終結。其他主要發行版——Debian、Red Hat、Fedora、Arch——是否會跟進 Ubuntu 將 sudo-rs 設為預設,將決定這項改變的規模。sudo-rs 對它們全部都是可用的。Canonical 認為稽核結果已經足夠。下一個決定,屬於其他維護者。

標籤: , , , , ,

討論

共有 0 則留言。