- Trên Ubuntu 25.10, một lỗi trong lệnh
date của coreutils (uutils) được viết bằng Rust đã khiến tính năng cập nhật tự động không hoạt động trên một số hệ thống
- Lỗi này được phát hiện trong gói rust-coreutils phiên bản 0.2.2-0ubuntu2 trở xuống và đã được sửa trong phiên bản 0.2.2-0ubuntu2.1 trở lên
- Sự cố ảnh hưởng đến triển khai đám mây, image container, môi trường cài đặt desktop và server nhưng không ảnh hưởng đến cập nhật thủ công thông qua lệnh
apt
- Ubuntu đang thử nghiệm chuyển sang các tiện ích dựa trên Rust (uutils, sudo-rs) trong bản phát hành này, nhằm đánh giá khả năng áp dụng cho phiên bản hỗ trợ dài hạn (LTS) vào năm sau
- Vụ việc này cho thấy sự cần thiết phải kiểm chứng độ ổn định trong quá trình chuyển đổi sang Rust, đồng thời đưa ra hàm ý quan trọng cho chiến lược bảo mật và bảo trì của các bản phân phối trong tương lai
Tổng quan về sự cố cập nhật tự động trên Ubuntu 25.10
- Dự án Ubuntu đã chính thức thông báo rằng một lỗi trong lệnh
date của uutils dựa trên Rust khiến một số hệ thống không thể tự động kiểm tra cập nhật
- Các hệ thống bị ảnh hưởng bao gồm môi trường triển khai đám mây, image container, bản cài đặt Ubuntu Desktop và Server
- Việc kiểm tra cập nhật tự động thất bại tạo ra nguy cơ chậm trễ vá bảo mật và cập nhật phần mềm
- Nhóm bảo mật Ubuntu đã cung cấp hướng dẫn khắc phục (remediation instructions) trong thông báo
- Người dùng cần cập nhật gói rust-coreutils lên phiên bản 0.2.2-0ubuntu2.1 trở lên để giải quyết vấn đề
- Lỗi này chỉ ảnh hưởng đến quy trình cập nhật tự động, không ảnh hưởng đến lệnh
apt hay các công cụ cập nhật thủ công khác
Nguyên nhân lỗi và phạm vi ảnh hưởng
- Nguyên nhân của sự cố được phân tích là do lệnh
date trong coreutils (uutils) được viết lại bằng Rust đã gây lỗi trong quá trình xử lý thời gian hệ thống
- Điều này khiến trình lập lịch cập nhật tự động không tính toán được ngày tháng chính xác, làm gián đoạn quy trình kiểm tra cập nhật
- Phạm vi ảnh hưởng trải rộng trên mọi hình thức phân phối của Ubuntu 25.10, đặc biệt có khả năng gây gián đoạn vận hành trong môi trường máy chủ tự động hóa và các instance đám mây
- Thông qua sự cố này, Ubuntu đã nhận thức được sự cần thiết phải tăng cường quy trình kiểm chứng độ ổn định của các tiện ích hệ thống dựa trên Rust
Chuyển đổi sang tiện ích dựa trên Rust (dự án “Oxidize”)
- Trong bản phát hành 25.10, Ubuntu đang thúc đẩy dự án “oxidize”, thử nghiệm thay thế coreutils dựa trên C hiện tại bằng uutils dựa trên Rust
- Đồng thời cũng đưa vào phiên bản Rust của lệnh sudo (
sudo-rs) với mục tiêu cải thiện bảo mật và an toàn bộ nhớ
- Đây là giai đoạn thử nghiệm nhằm đánh giá liệu có thể đưa các tiện ích dựa trên Rust vào bản phát hành hỗ trợ dài hạn (LTS) dự kiến vào tháng 4 năm 2026 hay không
- LWN đã từng đề cập đến dự án này vào tháng 3 năm 2025 và phân tích tác động của việc đưa Rust vào đối với độ ổn định cấu trúc của các bản phân phối Linux
Phiên bản đã sửa và hướng dẫn ứng phó
- Theo thông báo bảo mật của Ubuntu, rust-coreutils phiên bản 0.2.2-0ubuntu2 trở xuống có chứa vấn đề
- Cập nhật lên phiên bản 0.2.2-0ubuntu2.1 trở lên sẽ khắc phục lỗi
- Người dùng có thể thực hiện cập nhật gói thủ công thông qua lệnh
apt update && apt upgrade
- Cho đến khi tính năng cập nhật tự động được khôi phục, nên kiểm tra thủ công định kỳ
Hàm ý và triển vọng sắp tới
- Sự cố lần này được xem là một ví dụ cho thấy sự bất ổn ban đầu trong quá trình chuyển đổi sang Rust
- Điều này cho thấy việc áp dụng Rust để cải thiện an toàn bộ nhớ và bảo mật cần phải đi song song với kiểm chứng độ ổn định chức năng
- Thử nghiệm của Ubuntu có thể thúc đẩy xu hướng chấp nhận Rust trên toàn bộ hệ sinh thái bản phân phối Linux
- Nếu các tiện ích dựa trên Rust được tích hợp ổn định trong các bản phát hành LTS sắp tới, có thể kỳ vọng nâng cao bảo mật hệ thống và hiệu quả bảo trì
1 bình luận
Ý kiến trên Hacker News
Tôi nghĩ việc phát hiện vấn đề sớm theo cách này cũng ổn
Miễn là xử lý xong trước bản phát hành LTS thì không sao
Nhìn vào biểu đồ tương thích kiểm thử của uutils/coreutils thì vẫn chưa hoàn thiện
Đặc biệt,
datemới chỉ vượt qua 2 bài kiểm thử, bỏ qua 3 bài và lỗi 3 bàiTôi không nghĩ trạng thái như vậy có thể xem là sẵn sàng cho production
Với từng người dùng riêng lẻ thì lỗi kiểu này có thể nhỏ, nhưng trong môi trường quy mô lớn thì lại chí mạng
Tôi đã debug cả ngày hôm nay rồi cuối cùng phát hiện hệ thống đang gửi dữ liệu tới một nơi bị cấm rõ ràng
Kết quả là toàn bộ hệ thống dừng lại, và khi công cụ mà bạn phụ thuộc bị hỏng thì việc quản trị thực sự rất khó khăn
Nếu đây không phải là Rust mà là một ngôn ngữ khác thì hẳn các lập trình viên đã bị chỉ trích dữ dội
Tôi tự hỏi liệu coreutils hiện tại có vấn đề nghiêm trọng đến mức cần phải cải tiến hay không
Bài liên quan: mailing list OpenBSD
dateTôi muốn tìm liên kết bản vá bên phía uutils
Lỗi cốt lõi là hỗ trợ
date -r <file>chưa được triển khai nhưng Ubuntu vẫn tích hợp phiên bản đóLệnh đã âm thầm bỏ qua tùy chọn
-rvà không làm gì cảIssue liên quan: #8621, PR #8630
Commit cuối cùng (liên kết) là bản sửa để việc phân tích
datekhớp với GNU, nhưng đọc các bình luận khác thì có vẻ nguyên nhân không phải ở đóBình luận top thấy khá buồn cười — rằng tên bản Ubuntu tiếp theo sẽ là Grateful Guinea-Pig
Xem changelog của Ubuntu thì lỗi liên quan đến
date -rNếu xem changelog, báo cáo lỗi, issue và PR thì
date -rlẽ ra phải in ra thời điểm sửa đổi của tệp, nhưng bản Rust lại đơn giản là bỏ qua nóViệc thiếu một hành vi cơ bản như vậy thật đáng thất vọng đối với một dự án tự nhận là “thay thế an toàn”
Thông báo bảo mật của Ubuntu — có vẻ là một trường hợp điển hình
Tôi thấy Ubuntu 25.10 gần như không dùng được. Đây là lần đầu tiên tôi nói vậy về một bản không phải LTS
Tôi đồng ý với ý rằng “việc viết lại các tiện ích C đã được kiểm chứng hàng chục năm bằng Rust có thể tốt về dài hạn, nhưng các vấn đề ngắn hạn là điều có thể dự đoán được”
Nhưng tôi vẫn thắc mắc “dài hạn” ở đây thực sự là bao lâu
Trong bài trình bày ở FOSDEM, một nhà phát triển uutils đã khẳng định hiệu năng tốt hơn bằng benchmark sai, trong khi thực tế là do không hỗ trợ locale
Liên kết liên quan: bài trình bày FOSDEM, thread 1, thread 2
Vì việc viết mới các tiện ích cốt lõi là một điểm cộng rất lớn trong portfolio
Tôi tò mò về guided state-space exploration hay các kỹ thuật fuzzing hiện đại
Nếu đã có sẵn một triển khai cũ, có vẻ fuzzer có thể so sánh hành vi của hai phiên bản để xác minh kiểu white-box
Việc viết proptest cho toàn bộ không gian đầu vào sẽ tốn nhiều công sức, nhưng nếu đối số CLI ổn định thì hoàn toàn khả thi
Thậm chí có thể tự động tạo dựa trên tài liệu như man page
Trong Rust thì có thể dùng crate
proptest, còn để kiểm tra khác biệt CLI thì có vẻ hợp lý khi gọi bên ngoài bằng Hypothesis của Python