CVE-2026-98276 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 06.

리눅스 커널에서 다음 취약점이 해결되었습니다:

net: sock_gettstamp()에서 소켓 잠금 처리

sk->sk_flags는 소켓 잠금을 획득한 상태일 때만 변경되어야 합니다. 이는 sock_set_flag() 및 sock_reset_flag()가 원자적이지 않은 연산(__set_bit() 및 __clear_bit())을 사용하기 때문입니다.

sock_gettstamp()은 sk->sk_flags의 비트를 시스템 콜에서 소켓 잠금 없이 변경하는 마지막 위치 중 하나입니다(소켓에 SOCK_TIMESTAMP 설정을 위해 sock_enable_timestamp(sk, SOCK_TIMESTAMP) 호출).

sk_set_memalloc()과 sk_clear_memalloc()도 소켓 잠금 없이 sk->sk_flags를 변경하지만, 해당 함수의 호출자(nbd, iscsi_tcp, nvme-tcp, sunrpc, wireguard)에 대한 신중한 감사(audit)가 필요하며 이는 별도의 패치에서 처리될 예정입니다.

Jungwoo Lee와 Wongi Lee는 이 버그로 인한 UDP 소켓 use-after-free를 보고했습니다: SIOCGSTAMPNS_NEW ioctl이 bind()와 race condition을 일으켜 udp_lib_get_port()가 방금 설정한 SOCK_RCU_FREE 비트를 취소할 수 있습니다. 이는 두 스레드가 동일한 워드에 대해 read-modify-write 연산을 수행하기 때문입니다.

CPU 0 (bind) CPU 1 (SIOCGSTAMPNS_NEW) -------------------------------- ---------------------------- sk_flags 읽기 = F sk_flags 읽기 = F F | BIT(SOCK_RCU_FREE) 계산 F | BIT(SOCK_TIMESTAMP) 계산 F | BIT(SOCK_RCU_FREE) 저장 sk_add_node_rcu(sk, ...) F | BIT(SOCK_TIMESTAMP) 저장

손실된 업데이트 후, 소켓이 잠금 없는 UDP 수신 조회(lockless UDP receive lookups)에서 가시화된 상태에서 SOCK_RCU_FREE가 해제됩니다. 이로 인해 sk_destruct()는 RCU grace period를 기다리는 대신 즉시 소켓을 해제(free)합니다. 이때 수신 경로는 여전히 해당 소켓에 대한 참조 없음(reference-less) 포인터를 보유하고 있습니다:

BUG: KASAN: slab-use-after-free in ipv4_pktinfo_prepare+0x30/0x410 addr ffff888008806610에서 크기 8 읽기, 작업자 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

SOCK_TIMESTAMP을 설정해야 할 때만 소켓 잠금을 획득하여 일반적인 경우(lockless)의 성능을 유지합니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-413997

EPSS

0.00000

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!