Nguồn: corrode.dev via Hacker News

Tóm tắt

Vào tháng 4/2026, Canonical công bố 44 CVE trong uutils — bản tái cài đặt bằng Rust của GNU coreutils được tích hợp mặc định từ Ubuntu 25.10. Hầu hết các lỗ hổng này được phát hiện qua một cuộc kiểm toán bảo mật bên ngoài trước thời điểm phát hành Ubuntu 26.04 LTS. Điều đáng chú ý là tất cả các bug này tồn tại trong codebase Rust production, được viết bởi những lập trình viên giàu kinh nghiệm, và không có bug nào bị bắt bởi borrow checker, clippy lints hay cargo audit.

Nhóm bug lớn nhất liên quan đến “TOCTOU” (Time-of-check to time-of-use) — vấn đề điển hình khi làm hai syscall liên tiếp trên cùng một path. Giữa hai lần gọi, một kẻ tấn công có quyền ghi vào thư mục cha có thể hoán đổi path component bằng symlink. Stdlib của Rust khiến pattern này dễ mắc lỗi vì các API tiện lợi như fs::metadata, File::create, fs::set_permissions đều nhận path và re-resolve mỗi lần, thay vì giữ file descriptor cố định. Đây là lý do các lệnh cp, mv, rm vẫn còn dùng bản GNU trong Ubuntu 26.04 LTS.

Bài viết phân tích sâu các lớp bug khác mà Rust không thể ngăn chặn: logic error trong xử lý quyền, integer overflow trong tính toán không dùng checked arithmetic, race condition trong các thao tác trên filesystem. Rust bảo vệ khỏi memory unsafety nhưng không thể thay thế hoàn toàn tư duy bảo mật hệ thống.

Kết luận quan trọng: borrow checker của Rust loại bỏ cả lớp lỗ hổng memory safety, nhưng không thể thay thế kiểm toán bảo mật chuyên sâu, đặc biệt với các công cụ đặc quyền (privileged tools) tương tác với filesystem. Bài viết được viết không phải để chỉ trích uutils mà để rút ra bài học cho cộng đồng lập trình hệ thống bằng Rust.

👉 Đọc bài gốc