Công nghệ

Ubuntu 26.04 đặt Rust sudo làm mặc định, kết thúc 46 năm lỗ hổng bảo mật C

Adrian Kessler

Ubuntu 26.04 LTS, phát hành vào tháng 4 năm 2026, đưa sudo-rs trở thành triển khai mặc định của công cụ kiểm soát truy cập cấp hệ thống trên Linux. Khi người dùng hoặc tiến trình cần quyền nâng cao — để cài đặt phần mềm, sửa đổi tệp hệ thống, chạy dịch vụ với quyền root — sudo là người gác cổng. Bản gốc được viết bằng C. sudo-rs là phiên bản viết lại hoàn toàn bằng Rust, và hiện là phiên bản được cài mặc định trên bản phân phối Linux phổ biến nhất thế giới.

Bản gốc sudo được viết từ năm 1980. Trong suốt thời gian đó, mã nguồn C tích tụ thêm thứ khác bên cạnh các tính năng: một lớp lỗ hổng quản lý bộ nhớ mà Rust loại bỏ ngay ở cấp độ trình biên dịch. Nghiêm trọng nhất là CVE-2021-3156, có tên là Baron Samedit. Lỗ hổng tồn tại không bị phát hiện trong khoảng mười năm, cho phép leo thang đặc quyền cục bộ trên mọi bản phân phối Linux lớn. Kẻ tấn công cục bộ với tài khoản shell không phải root có thể trở thành root. Canonical đã vá lỗi trong vòng 24 giờ sau khi công bố. Điều kiện kiến trúc cho phép lỗ hổng đó — cơ chế quản lý bộ nhớ thủ công của C — không được vá.

Điều Rust thay đổi không phải là cách mã được viết, mà là loại lỗi nào có thể tồn tại trong mã. Tràn bộ đệm, lỗi use-after-free và lỗi truy cập con trỏ null là một dạng lỗ hổng mà Rust loại bỏ ở thời điểm biên dịch — trình biên dịch từ chối mã có những mẫu này trước khi mã có thể chạy. Đối với một phần mềm xử lý leo thang đặc quyền, đó là một ràng buộc quan trọng được loại khỏi mô hình đe dọa.

sudo-rs đã hoàn thành một cuộc kiểm toán bảo mật độc lập toàn diện vào năm 2023. Dự án đạt được hiệu suất tương đương với triển khai C. Canonical bắt đầu cung cấp nó như một tùy chọn trong các phiên bản Ubuntu trước đó trước khi đặt làm mặc định trong 26.04. Cách tiếp cận theo từng giai đoạn phản ánh sự thận trọng phù hợp khi thay thế một công cụ mà nếu hỏng có thể khóa người dùng khỏi truy cập hệ thống hoặc đưa kẻ tấn công lên root.

Ubuntu 26.04 cũng đi kèm uutils coreutils — các phiên bản viết lại bằng Rust của các công cụ cơ bản bao gồm ls, cat và mv. Nhưng cp, mv và rm vẫn dùng triển khai GNU C trong bản phát hành này. Lý do của Canonical: các điều kiện đua TOCTOU trong triển khai Rust đó mang rủi ro phá hủy dữ liệu mà nhóm đánh giá là quá cao cho một bản phát hành LTS. Việc triển khai theo từng giai đoạn tiết lộ một điều trung thực về cách tiếp cận ‘chỉ cần viết lại bằng Rust’: công cụ có sẵn, nhưng việc di chuyển yêu cầu phân tích an toàn theo từng trường hợp cụ thể, không phải công tắc tổng thể.

Nhân Linux bắt đầu chấp nhận mã driver Rust vào năm 2022. Nhóm Android đã dùng Rust cho mã hệ thống mới từ năm 2021. Microsoft đã viết lại các thành phần Windows nhạy cảm với bộ nhớ bằng Rust. Việc Ubuntu đặt sudo-rs làm mặc định là một cột mốc quan trọng vì nó không phải là thí nghiệm trên driver mới hay thành phần tùy chọn — đó là lớp xác thực cho truy cập hệ thống, được cài mặc định trên mọi bản cài Ubuntu mới.

Mẫu CVE đã tạo ra Baron Samedit kết thúc đối với người dùng Ubuntu trong cấu hình này. Liệu các bản phân phối lớn khác — Debian, Red Hat, Fedora, Arch — có theo bước Ubuntu chuyển sang sudo-rs mặc định hay không là câu hỏi quyết định quy mô của thay đổi. sudo-rs có sẵn cho tất cả chúng. Canonical quyết định kết quả kiểm toán là đủ. Quyết định tiếp theo thuộc về những người bảo trì khác.

Thẻ: , , , , ,

Thảo luận

Có 0 bình luận.