Một vụ hack xấu xí trong nhân Linux đã tồn tại trong mainline hơn ba năm đã được gọi ra. Do DDX có lỗi X.Org Server/xf86-video-modeetting DDX, nhân Linux đã áp đặt các hành vi khác nhau về việc một tiến trình có bắt đầu bằng”X”hay không và lần lượt vô hiệu hóa hỗ trợ thiết lập chế độ nguyên tử.
Nhà nghiên cứu bảo mật Linux Jason Donenfeld (người cũng nổi tiếng với việc phát triển WireGuard), đã tình cờ phát hiện ra vụ hack mã xấu xí này trong kernel.
Donenfeld đã nhận xét vào cuối tuần này về danh sách gửi thư nhân :
Điều này hoàn nguyên 26b1d3b527e7 (“drm/atom: Mang đồ chơi nguyên tử ra khỏi X”), một k bùn giống rootkit không có hoạt động kinh doanh nào bên trong một hạt nhân có mục đích chung. Đó là loại hack gỡ lỗi mà tôi sẽ sử dụng trong giây lát nhưng không bao giờ cam kết, hoặc một loại thủ thuật phần mềm độc hại babbies-first-process-hider.
Thông tin cơ bản là một số mã không gian người dùng-xorg-server-có DDX thiết lập kiểm duyệt không thực sự được mã hóa đúng. Không ai muốn duy trì X11 nữa, thay vì sửa mã lỗi, hạt nhân đã được điều chỉnh để tránh phải chạm vào X11. Một lỗi lầm, nhưng đủ công bằng: nếu hạt nhân không muốn hỗ trợ một số API không gian người dùng nữa, điều đúng đắn cần làm là sắp xếp cho một dự phòng duyên dáng mà không gian người dùng cho rằng nó không khả dụng theo cách có thể quản lý được.
Tuy nhiên, * cách * thực hiện điều đó chỉ là kiểm tra `current-> comm [0]==’X”và vô hiệu hóa nó chỉ trong trường hợp đó. Vì vậy, điều đó có nghĩa là * không phải * chỉ đơn giản là vấn đề hạt nhân không muốn hỗ trợ một API không gian người dùng cụ thể nữa, mà đúng hơn là hạt nhân không muốn hỗ trợ xorg-server, trên lý thuyết, nhưng trên thực tế, hóa ra, đó là tất cả các quá trình bắt đầu bằng’X’.
Chơi trò chơi với current-> comm như thế này rõ ràng là sai và khá sốc khi điều này đã từng được thực hiện.
gửi tới hạt nhân này với kiểm tra ký tự đầu tiên”X”được thực hiện trở lại vào tháng 9 năm 2019. Đối số trong cam kết hạt nhân Linux đó vào thời điểm đó là:
ddx-modesetting có một ý tưởng hoàn toàn bị hỏng về cách nguyên tử hoạt động:
-không vô hiệu hóa các trình kết nối cũ, giả sử chúng được tự động tắt giống như với setcrtc cũ
-giả sử ASYNC_FLIP được nối qua đối với ioctl nguyên tử
-không phải là một lệnh gọi đến TEST_ONLY[Nói cách khác] việc triển khai là một bản dịch 1: 1 của các ioctl kế thừa sang nguyên tử, đó là a) bị hỏng b) vô nghĩa.
Chúng tôi đã có lỗi trong cả i915 và amdgpu-DC, nơi điều này ngăn chúng tôi bật các tính năng gọn gàng.
Nếu ai quan tâm đến nguyên tử trong X, chúng ta có thể dễ dàng thêm cấp nguyên tử mới (req-> value==2) cho X để lấy lại những món đồ chơi sáng bóng.
Vì các phiên bản-modesetting bị hỏng này đã được vận chuyển, thực sự không có cách nào khác để thoát khỏi ràng buộc này.
Tin”tốt”là kể từ đó về phía không gian người dùng trở lại vào năm 2019, mã xf86-video-modeetting đã tiếp tục và tắt hỗ trợ nguyên tử theo mặc định. Vì vậy, về mặt kỹ thuật nếu chạy ngăn xếp X.Org được cập nhật trong vòng ba năm qua, việc hack hạt nhân này không còn cần thiết nữa vì không gian người dùng chỉ cần tránh API nguyên tử.
Chúng tôi sẽ xem liệu Linus Torvalds có đồng ý với việc hack này bị xóa hay không vì dù sao thì nó cũng đi ngược lại nguyên tắc”không phá vỡ không gian người dùng”của anh ấy, bằng cách sau đó khôi phục hệ thống nếu dính vào ngăn xếp Máy chủ X.Org đã lỗi thời và muốn chạy với phiên bản hạt nhân trong tương lai. Chúng ta sẽ thấy nhưng đáng ngạc nhiên là phải mất ba năm để đoạn mã bẩn thỉu này bị chỉ trích.