CVE-2025-40341 in Linux
Tóm tắt
Bởi VulDB • 01/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
futex: Không rò rỉ con trỏ robust_list khi xảy ra race condition trong quá trình thực thi (exec)
Hàm sys_get_robust_list() và compat_get_robust_list() sử dụng ptrace_may_access() để kiểm tra xem tiến trình gọi có được phép truy cập vào con trỏ robust_list của một tiến trình khác hay không. Phép kiểm tra này bị ảnh hưởng bởi race condition khi xảy ra đồng thời lệnh exec() trong tiến trình đích.
Trong quá trình thực thi (exec), một tiến trình có thể chuyển đổi từ việc chạy mã nhị phân không đặc quyền sang mã nhị phân có đặc quyền (ví dụ: setuid binary) và các thông tin xác thực/bộ nhớ của nó có thể thay đổi. Nếu get_robust_list() gọi ptrace_may_access() trước khi quá trình chuyển đổi này diễn ra, nó có thể vô tình cho phép truy cập vào thông tin nhạy cảm sau khi tiến trình đích trở thành đặc quyền.
Một lần truy cập bị race condition cho phép kẻ tấn công khai thác khoảng thời gian mà ptrace_may_access() trả về kết quả chấp nhận trước khi một tiến trình đích chuyển sang trạng thái đặc quyền thông qua lệnh exec().
Ví dụ, hãy xem xét một tiến trình không đặc quyền T đang chuẩn bị thực thi một mã nhị phân setuid-root. Một tiến trình kẻ tấn công A gọi get_robust_list(T) trong khi T vẫn còn ở trạng thái không đặc quyền. Vì ptrace_may_access() kiểm tra quyền dựa trên thông tin xác thực hiện tại, nó sẽ thành công. Tuy nhiên, nếu T bắt đầu lệnh exec ngay sau đó, nó sẽ trở nên có đặc quyền và có thể thay đổi các ánh xạ bộ nhớ của mình. Do get_robust_list() tiếp tục truy cập vào T->robust_list mà không đồng bộ hóa với quá trình exec(), nó có thể đọc được các con trỏ trong user-space từ một tiến trình hiện đã có đặc quyền.
Hành động này vi phạm các hạn chế truy cập sau khi thực thi (post-exec) theo thiết kế và có thể làm lộ địa chỉ bộ nhớ nhạy cảm hoặc được sử dụng như một thành phần cơ bản trong chuỗi khai thác lớn hơn. Do đó, race condition này có thể dẫn đến việc tiết lộ thông tin trái phép qua ranh giới đặc quyền và gây ra rủi ro bảo mật tiềm tàng.
Hãy lấy khóa đọc (read lock) trên signal->exec_update_lock trước khi gọi ptrace_may_access() và truy cập vào robust_list/compat_robust_list. Điều này đảm bảo rằng trạng thái exec của tiến trình đích vẫn ổn định trong quá trình kiểm tra, cho phép xác thực thông tin xác thực một cách nhất quán và đồng bộ hóa.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.