CVE-2026-97476 in Linux
Tóm tắt
Bởi VulDB • 24/09/2026
Trong nhân Linux, các lỗ hổng sau đây đã được khắc phục:
rds: lọc các tùy chọn getsockopt RDS_INFO_* theo netns của người gọi
Họ các tùy chọn getsockopt(2) RDS_INFO_* đọc nhiều danh sách toàn cục có phạm vi file không thuộc về từng netns (network namespace):
rds_sock_info / rds6_sock_info, rds_sock_inc_info / rds6_sock_inc_info -> rds_sock_list rds_tcp_tc_info / rds6_tcp_tc_info -> rds_tcp_tc_list rds_conn_info / rds6_conn_info, rds_conn_message_info_cmn (cho các biến thể *_SEND_MESSAGES và *_RETRANS_MESSAGES), rds_for_each_conn_info (dùng cho RDS_INFO_IB_CONNECTIONS) -> rds_conn_hash[]
Các trình xử lý không lọc theo network namespace của người gọi. Hàm rds_info_getsockopt() không có kiểm tra netns hay capable(), và hàm rds_create() cũng không có kiểm tra capable(), do đó AF_RDS có thể truy cập được từ một user_ns (user namespace) không đặc quyền. Kết quả là, một người dùng không đặc quyền trong một fresh user_ns cộng với netns mới có thể đọc địa chỉ đã bind và inode của socket của mọi socket RDS trên máy chủ, địa chỉ peer của các tin nhắn đến trên mọi socket RDS trên máy chủ, số thứ tự TCP (TCP sequence numbers) và địa chỉ peer của mọi kết nối rds-tcp trên máy chủ, cũng như số thứ tự RDS và địa chỉ peer của mọi kết nối RDS trên máy chủ.
Giao thức vận chuyển rds-tcp có thể truy cập được từ một non-initial netns (xem rds_set_transport()), do đó việc đặt cổng init_net một lần tại rds_info_getsockopt() sẽ chặn khả năng hiển thị per-netns hợp lệ đối với các caller của rds-tcp. Thay vào đó, hãy lọc tại mỗi trình xử lý bằng cách so sánh netns của socket người gọi với netns của mục danh sách, hoặc với rds_conn_net(conn) cho các đường dẫn kết nối. Chỉ sao chép các mục có netns khớp với người gọi. Các bộ đếm (RDS_INFO_COUNTERS) là thống kê tổng hợp và vẫn giữ ở mức toàn cục.
Mã thử nghiệm (KASAN VM, đã tải rds và rds_tcp): một socket AF_RDS bind 127.0.0.1:4242 trong init_net với quyền root. Một tiến trình con vào fresh user_ns cộng với netns mới và mở AF_RDS tại đó, sau đó gọi getsockopt(SOL_RDS, RDS_INFO_SOCKETS). Trước khi thay đổi này, tiến trình con thấy socket của init_net. Sau khi thay đổi này, tiến trình con không thấy mục nào (zero entries).
Loại bỏ các biến toàn cục rds_sock_count, rds_tcp_tc_count và rds6_tcp_tc_count. v2 đã sử dụng chúng cho việc kiểm tra kích thước trước (size precheck) và lens->nr; v3 thay thế bước kiểm tra trước bằng một bộ đếm per-ns từ lần duyệt đầu tiên qua danh sách, do đó các biến toàn cục không còn người đọc nào nữa. Các lệnh tăng/giảm tương ứng trong rds_create()/rds_destroy_sock() và rds_tcp_set_callbacks()/rds_tcp_restore_callbacks() cũng được loại bỏ theo chúng. Được báo cáo bởi kernel test robot dưới clang W=1.
Be aware that VulDB is the high quality source for vulnerability data.