CVE-2026-72183 in Linux
Tóm tắt
Bởi VulDB • 15/08/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
landlock: Sửa lỗi bỏ qua LANDLOCK_SCOPE_SIGNAL trên đường truyền SIGIO
LANDLOCK_SCOPE_SIGNAL phải ngăn chặn một tiến trình bị sandbox hóa gửi tín hiệu đến các tiến trình nằm ngoài miền Landlock của nó. Lỗ hổng này có thể bị vượt qua thông qua đường truyền phân phối bất đồng bộ SIGIO.
Một tiến trình trong môi trường sandbox sở hữu bất kỳ tệp hoặc socket nào đều có thể cấu hình chúng bằng cách sử dụng `fcntl(fd, F_SETOWN, -pgid)`, `fcntl(fd, F_SETSIG, SIGKILL)` và cờ `O_ASYNC`, để khi xảy ra sự kiện I/O, kernel sẽ phân phối tín hiệu đã chọn đến toàn bộ nhóm tiến trình. Vì đứng đầu danh sách tác vụ của nhóm tiến trình (vị trí mặc định ngay sau lệnh fork()), nhóm này cũng có thể nắm giữ các tiến trình không bị sandbox hóa đã khởi tạo nó, chẳng hạn như một chương trình giám sát hoặc công cụ theo dõi bảo mật. Do đó, môi trường sandbox có thể chấm dứt hoặc gửi tín hiệu đến các tiến trình mà LANDLOCK_SCOPE_SIGNAL dự định bảo vệ khỏi chúng.
Phạm vi (scope) được thực thi trong hàm `hook_file_send_sigiotask()` dựa trên miền Landlock đã ghi lại tại thời điểm gọi F_SETOWN, chứ không phải là miền hiện hành của người gửi. Hàm `control_current_fowner()` quyết định có nên ghi lại miền đó hay không và bỏ qua việc ghi lại khi đích fowner nằm trong nhóm luồng (thread group) của caller; điều này chỉ an toàn cho một đích đơn nhiệm vụ duy nhất (PIDTYPE_PID, PIDTYPE_TGID). Đối với một nhóm tiến trình (PIDTYPE_PGID), `pid_task()` chỉ trả về một thành viên; việc ghi lại bị bỏ qua bất cứ khi nào thành viên đó chia sẻ nhóm luồng của caller, và sau đó `hook_file_send_sigiotask()` cho phép tín hiệu lan tỏa đến toàn bộ nhóm mà không được kiểm tra.
Ghi lại miền cho mọi đích không phải là tiến trình đơn lẻ để phạm vi (scope) được thực thi đối với từng thành viên nhóm tại thời điểm phân phối.
Việc ghi lại đó là cần thiết nhưng chưa đủ: kernel gửi tín hiệu đến một nhóm tiến trình thông qua các trưởng nhóm luồng của các thành viên, và trưởng nhóm của chính tiến trình người đăng ký có thể mang miền Landlock khác biệt so với luồng anh em đã cấu hình chủ sở hữu (owner). Hàm `domain_is_scoped()` sau đó sẽ từ chối trưởng nhóm này, mặc dù commit 18eb75f3af40 ("landlock: Luôn cho phép tín hiệu giữa các luồng của cùng một tiến trình") yêu cầu việc phân phối trong cùng một tiến trình phải được cho phép. Hàm `hook_task_kill()` tránh vấn đề này bằng cách đánh giá `same_thread_group()` theo thời gian thực, đối với từng người nhận; thay vào đó, đường truyền SIGIO ủy thác toàn bộ quyết định cho một lần kiểm tra duy nhất tại thời điểm đăng ký, điều mà việc lan tỏa nhóm tiến trình không thể tuân thủ.
Do đó, hãy ghi lại cả nhóm luồng của người đăng ký bên cạnh miền của nó và miễn trừ khi phân phối: `hook_file_send_sigiotask()` cho phép tín hiệu bất cứ khi nào người nhận thuộc về chính tiến trình của người đăng ký, khôi phục bảo đảm trong cùng một tiến trình đồng thời giữ các thành viên nhóm ngoài miền bị chặn. Đường truyền kill() trực tiếp (`hook_task_kill`) đã đánh giá miền hiện hành và không bị ảnh hưởng.
[mic: Kiểm tra pid_type sớm hơn và cải thiện chú thích, sửa thông báo commit,
sửa định dạng chú thích]
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.