CVE-2026-89671 in Linux
Tóm tắt
Bởi VulDB • 12/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
nfsd: kiểm tra argp->mask trước khi thực hiện setacl nfs3
Hàm `nfsd3_proc_setacl()` gọi hàm `set_posix_acl()` một cách không điều kiện cho cả `ACL_TYPE_ACCESS` và `ACL_TYPE_DEFAULT`, truyền trực tiếp các giá trị `argp->acl_access` và `argp->acl_default`. Bộ giải mã ACL NFSv3 chỉ điền vào các con trỏ này khi bit mask tương ứng được đặt:
nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* nếu không, con trỏ vẫn là NULL (pc_argzero) */
nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default)
Việc gọi `set_posix_acl(idmap, dentry, type, NULL)` là thao tác "xóa loại ACL này" của VFS. Do đó, một con trỏ NULL có nghĩa là "máy khách không gửi phần dữ liệu này" khó phân biệt với trường hợp "máy khách yêu cầu xóa ACL này". Một lệnh SETACL với mask=NFS_ACL sẽ lặng lẽ làm mất ACL mặc định (default ACL) của thư mục; còn mask=0 thì xóa cả hai.
Hàm `nfsd3_proc_getacl()` anh em đã kiểm tra argp->mask trước khi thao tác trên từng phần dữ liệu; hãy áp dụng nguyên tắc tương tự cho setacl.
Cách khắc phục là bao bọc mỗi lệnh gọi `set_posix_acl()` bằng phép kiểm tra bit mask tương ứng và khởi tạo biến lỗi về 0 trước khi lấy inode_lock, để một yêu cầu không có bất kỳ bit nào được đặt sẽ giữ nguyên các ACL trên đĩa và trả về nfs_ok. Đường dẫn out_drop_lock và lệnh posix_acl_release() không điều kiện tại nhãn out: vẫn được giữ nguyên; cả hai đều xử lý an toàn (NULL-tolerate) các phần dữ liệu bị bỏ qua.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.