CVE-2026-98401 in Linux정보

요약

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

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

net: iptunnel: 터널 탈캡슐화 중 stale transport header 수정

Syzbot이 tunnel decapsulation 후 stale한 transport_header 오프셋으로 인해 qdisc_pkt_len_segs_init()에서 크래시가 발생하는 것을 보고했습니다.

BUG: unable to handle page fault for address: ffffed102091a42e Oops: Oops: 0000 [#1] SMP KASAN NOPTI
CPU: 0 UID: 0 PID: 340 Comm: qdisc_uaf_repro Not tainted 7.2.0-rc4-00061-g248951ddc14d #256 PREEMPT(full) Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 RIP: 0010:__asan_load2

qdisc_pkt_len_segs_init (net/core/dev.c:4145) __dev_queue_xmit (net/core/dev.c:4787) br_dev_queue_push_xmit (net/bridge/br_forward.c:53) br_handle_frame_finish (net/bridge/br_input.c:229) br_handle_frame (net/bridge/br_input.c:315) __netif_receive_skb_core.constprop.0 (net/core/dev.c:6099) __netif_receive_skb_list_core (net/core/dev.c:6287) netif_receive_skb_list_internal (net/core/dev.c:6445) napi_complete_done (net/core/dev.c:6813) gro_cell_poll (net/core/gro_cells.c:74) __napi_poll (net/core/dev.c:7735) net_rx_action (net/core/dev.c:7798 net/core/dev.c:7955) handle_softirqs (kernel/softirq.c:622) do_softirq (kernel/softirq.c:523 kernel/softirq.c:510 ) __local_bh_enable_ip (kernel/softirq.c:450) tun_get_user (drivers/net/tun.c:1986 (discriminator 1)) tun_chr_write_iter (drivers/net/tun.c:2032)

이 문제는 commit 7fb4c1967011("net: pull headers in qdisc_pkt_len_segs_init()")에서 qdisc가 transport header를 읽을 때까지 완전히 latent 상태였습니다. 크래시가 발생하려면 다음 네 가지 조건이 모두 충족되어야 합니다:

1. 수신 패킷은 encapsulated되어 있으며 GSO metadata를 포함합니다. 외부 tunnel 컨텍스트에 있는 동안 skb->transport_header에는 outer transport header 오프셋이 저장됩니다. 2. 터널 리시버가 outer headers를 제거합니다. skb->data는 inner frame으로 전진하지만, skb->transport_header는 이제 제거된 outer L4 헤더를 가리킨 상태로 남아 있으므로 새 데이터 기준으로 음수 오프스트가 됩니다. 3. Inner frame은 로컬 IP 스택에 전달되지 않습니다. 대신 bridge 또는 HSR에 의해 L2에서 포워딩되므로 ip_rcv_core()가 실행되지 않으며 transport header는 inner L4 오프셋으로 재설정되지 않습니다. 4. 포워딩 경로가 __dev_queue_xmit()를 호출하여 qdisc_pkt_len_segs_init()로 진입합니다. 해당 함수는 skb_transport_offset(skb)에서 GSO 헤더 길이를 계산합니다. 오프스트가 음수이므로 unsigned 캐스팅 오버플로우가 발생하고 pskb_may_pull(skb, hdr_len + sizeof(struct tcphdr))가 skb의 끝을 넘어 읽어서 KASAN fault 또는 page fault를 유발합니다.

이 문제는 gro_cells를 통해 처리/집계되는 GSO 패킷(shinfo->gso_size != 0)에 특히 필요합니다. 모든 tunnel driver에서 gro_cell 내 transport_header를 ~0U sentinel로 클리어하여 이 문제를 수정합니다. GTP는 GRO/GSO를 지원하지 않으므로, 악의적인 GSO 패킷을 GTP 내에서 직접 드롭합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-419840

EPSS

0.00209

활동

낮음

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!