CVE-2026-98852 in Linux정보

요약

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

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

net: 터널링된 패킷에 대한 IPv6 확장 헤더(exthdr) 감지 기능 확대

커밋 c4336a07eb6b("net: IPV6_CSUM GSO 폴백 시 터널링 트래픽을 올바르게 처리")는 skb_gso_has_extension_hdr()를 skb->encapsulation에 따라 상호 배타적인 분기로 나누었습니다. 그러나 이는 모든 경로를 아직 다루지 못했습니다:

1. skb->encapsulation이 설정된 경우, 외부 헤더가 검사되지 않습니다. ip6_gre 및 ip6_tunnel과 같은 IPv6 터널은 기본적으로 외부 Destination Options 헤더(encap_limit)를 추가합니다. 이들의 GSO 패킷은 소프트웨어 GSO를 건너뛰므로, skb_csum_hwoffload_help()는 외부 확장 헤더를 감지하고 GSO skb에 대해 skb_checksum_help()를 호출하여 경고와 함께 해당 패킷을 드롭(drop)합니다.

2. ip6_tunnel과 같이 외부 전송 계층(transport header) 없이 IPv6 위에서 동작하는 터널은 skb->transport_header를 내부 전송 헤더로 남겨둡니다. 이로 인해 skb_network_header_len()이 외부 IPv6, 터널 및 내부 IP 헤더 전체에 걸쳐 적용되어 거짓 양성(false positive) 결과가 발생합니다.

3. SCTP-in-UDP나 PSP와 같이 내부 네트워크 헤더가 없는 UDP 터널의 경우 검사할 내부 IPv6 헤더가 없습니다. 따라서 외부 헤더만으로 판단해야 합니다.

4. skb_header_pointer() 없이 inner_ip_hdr(skb)->version을 직접 역참조(dereferencing)하는 것은 안전하지 않습니다.

대신, 외부 IPv6 헤더에서 ipv6_ext_hdr(nexthdr)를 검사하고, 설정된 경우 내부 IPv6 헤더에서도 이를 확인합니다. 헤더는 skb_header_pointer()를 통해 읽습니다. 또한 !skb->encapsulation일 때 encapsulated packets(예: virtio 등 skb->encapsulation이 없는 패킷 포함)도 포착하기 위해 skb_network_header_len() 검사를 유지합니다.

skb_csum_hwoffload_help()에서도 동일한 헬퍼 함수를 사용합니다. 기존에 직접 구현된 테스트는 (2)의 거짓 양성과 내부 헤더 무시라는 문제를 가지고 있습니다.

배경: 터널링 패킷의 체크섬 오프로드 불변 조건(invariants):

GSO가 아닌 skb인 경우: - 내부 패킷이 CHECKSUM_PARTIAL일 경우, 로컬 체크섬 오프로드(Local Checksum Offload)는 외부 체크섬을 소프트웨어로 계산하고 장치는 내부 L4 체크섬만 오프로드합니다. - 내부 패킷이 CHECKSUM_NONE(예: SCTP-in-UDP, ESP-in-UDP, 원격 체크섬 오프로드 등)일 경우, 장치가 대신 외부 UDP 또는 GRE 체크섬을 오프로드합니다.

GSO skb인 경우: - NETIF_F_GSO_UDP_TUNNEL_CSUM 또는 NETIF_F_GSO_GRE_CSUM 기능을 갖춘 장치는 세그먼트별로 내부 및 외부 체크섬 모두를 계산합니다. 외부 체크섬은 페이로더 헤더(pseudo-header) 체크섬만으로 시드(seeded)됩니다.

NETIF_F_IPV6_CSM을 지원하는 장치는 내부 헤더에 도달하기 위해 외부 헤더들을 파싱해야 합니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-421875

EPSS

0.00157

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!