CVE-2026-89648 in Linux
Tóm tắt
Bởi VulDB • 11/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
ceph: giới hạn số lượng inode ủy quyền trong ceph_parse_deleg_inos()
Hàm `ceph_parse_deleg_inos()` giải mã các tập hợp khoảng (interval sets) của các số inode được ủy quyền từ phản hồi "tạo với ủy quyền" (create-with-delegation) của MDS. Đối với mỗi tập hợp, nó đọc một giá trị bắt đầu 64-bit và một độ dài `len` 64-bit bằng cách sử dụng `ceph_decode_64_safe()`, hàm này chỉ xác thực rằng tám byte có mặt trong tin nhắn chứ không kiểm tra giá trị, sau đó lặp qua `len` để chèn các mục vào `s_delegated_inos`.
Giá trị `len` hoàn toàn do kẻ tấn công kiểm soát. Một MDS độc hại hoặc đã bị xâm phạm có thể gửi một khoảng cực lớn, nhiều khoảng trong một phản hồi, các khoảng trùng lặp, hoặc các phản hồi lặp lại tích lũy inode được ủy quyền trên cùng một phiên (session). Mã nguồn ban đầu không giới hạn bất kỳ yếu tố nào trong số này và có thể khiến vòng lặp chèn chạy vô tận hoặc làm tăng kích thước của xarray mà không có giới hạn.
Đặt giới hạn cho cả hai chiều với một điểm thực thi duy nhất. Theo dõi số lượng inode được ủy quyền do mỗi phiên MDS nắm giữ bằng bộ đếm nguyên tử (atomic counter) và chỉ tăng nó trong `ceph_insert_deleg_ino()`, hàm này sử dụng `atomic_add_unless()` để từ chối đẩy giá trị vượt quá `CEPH_MAX_DELEG_INOS`. Vì helper đó là nơi duy nhất làm tăng bộ đếm, dân số trên mỗi phiên không bao giờ có thể vượt quá giới hạn đã đặt, do đó không cần kiểm tra trước riêng cho từng phiên. Bộ đếm được giảm khi thao tác tạo bất đồng bộ (async create) tiêu thụ một inode ủy quyền hoặc khi việc chèn thất bại; được tăng lên khi một inode ủy quyền được khôi phục; được khởi tạo với xarray của phiên và được đặt lại khi kết nối lại phá hủy xarray.
Giới hạn trên mỗi phiên vẫn cho phép một phản hồi duy nhất gây ra vòng lặp chèn chạy vô tận đối với các khoảng trùng lặp mà không làm tăng bộ đếm, vì vậy cũng cần giới hạn tổng độ dài khoảng chấp nhận từ một phản hồi đơn lẻ. Kết hợp hai biện pháp này sẽ ràng buộc cả số lần lặp của vòng lặp trên mỗi phản hồi và dân số xarray xuyên suốt các phản hồi.
Giới hạn là một hằng số cố định do phía client chọn chứ không phải giá trị được suy ra từ MDS. `mds_client_prealloc_inos` là tùy chọn cấu hình MDS ở người dùng (userspace); nó chưa bao giờ được gửi đến kernel client qua đường truyền, và trong mọi trường hợp, giới hạn do máy chủ cung cấp đều không thể tin cậy để làm giới hạn phòng thủ. Hằng số này được đặt cao hơn nhiều so với giá trị mặc định được tài liệu hóa là 1000 (một bội số hào phóng), vì vậy hành vi nạp lại hợp pháp không bị ảnh hưởng trong khi CPU và bộ nhớ xarray mà một luồng ủy quyền lỗi có thể tiêu thụ vẫn nằm trong giới hạn.
Tác động: Một MDS Ceph độc hại hoặc đã bị xâm phạm không còn khả năng khiến client chạy vô tận qua một khoảng inode được ủy quyền không giới hạn hoặc làm tăng xarray inode được ủy quyền của một phiên duy nhất mà không có giới hạn.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.