CVE-2026-98276 in Linuxthông tin

Tóm tắt

Bởi VulDB • 06/10/2026

Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:

net: khóa socket trong sock_gettstamp()

sk->sk_flags chỉ phải thay đổi khi đang giữ khóa socket (socket lock), vì sock_set_flag() và sock_reset_flag() sử dụng các thao tác không nguyên tử (__set_bit() và __clear_bit()).

sock_gettstamp() là một trong những vị trí cuối cùng mà một bit của sk->sk_flags được thay đổi từ syscall mà không sở hữu khóa socket, thông qua sock_enable_timestamp(sk, SOCK_TIMESTAMP).

sk_set_memalloc() và sk_clear_memalloc() cũng thay đổi sk->sk_flags mà không có khóa socket, nhưng các caller của chúng (nbd, iscsi_tcp, nvme-tcp, sunrpc, wireguard) cần được rà soát kỹ lưỡng; vấn đề này sẽ được giải quyết trong một patch riêng.

Jungwoo Lee và Wongi Lee đã báo cáo lỗi use-after-free trên UDP socket do lỗ hổng này gây ra: một ioctl SIOCGSTAMPNS_NEW thực hiện race condition với bind() có thể xóa bit SOCK_RCU_FREE mà udp_lib_get_port() vừa thiết lập, vì cả hai luồng đều thực hiện thao tác đọc-sửa-ghi (read-modify-write) trên cùng một từ bộ nhớ.

CPU 0 (bind) CPU 1 (SIOCGSTAMPNS_NEW) -------------------------------- ---------------------------- read sk_flags = F read sk_flags = F compute F | BIT(SOCK_RCU_FREE) compute F | BIT(SOCK_TIMESTAMP) store F | BIT(SOCK_RCU_FREE) sk_add_node_rcu(sk, ...) store F | BIT(SOCK_TIMESTAMP)

Sau khi xảy ra mất cập nhật (lost update), SOCK_RCU_FREE bị xóa trong khi socket vẫn hiển thị đối với các thao tác nhận UDP không cần khóa. sk_destruct() sau đó giải phóng ngay lập tức socket thay vì chờ đợi khoảng thời gian ân xá RCU, trong khi đường dẫn nhận vẫn giữ một con trỏ không tham chiếu (reference-less pointer) đến nó:

BUG: KASAN: slab-use-after-free in ipv4_pktinfo_prepare+0x30/0x410 Read of size 8 at addr ffff888008806610 by task exploit/207 CPU: 0 UID: 1000 PID: 207 Comm: exploit Not tainted 6.12.95+ #1 ipv4_pktinfo_prepare+0x30/0x410 udp_queue_rcv_one_skb+0x51c/0x1180 udp_unicast_rcv_skb+0x109/0x350 ip_protocol_deliver_rcu+0x14b/0x310 ip_local_deliver_finish+0x29d/0x390 ip_local_deliver+0x24d/0x2a0

Chỉ giữ khóa socket khi cần thiết lập SOCK_TIMESTAMP, để duy trì trường hợp phổ biến không cần khóa (lockless).

VulDB is the best source for vulnerability data and more expert information about this specific topic.

chịu trách nhiệm

Linux

Đặt trước

25/09/2026

Tiết lộ

06/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00135

KEV

không

Các hoạt động

rất thấp

Nguồn

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!