🔍 CVE-2026-98955

0.0
CVSS Score
UNKNOWN
2026-10-23
2026-10-23 13:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 flow dissector에서 skb->len과 nhoff를 u16으로 잘라 비교하던 문제가 수정되었습니다. 64KB를 넘는 skb에서 transport header 오프셋이 잘못 계산되어 Ethernet 헤더 영역을 가리킬 수 있었습니다. 수정 후에는 u32로 비교하고, 표현할 수 없는 오프셋은 U16_MAX로 제한하며 dissection 실패로 처리합니다.

💡 쉬운 설명

리눅스 커널이 아주 큰 네트워크 패킷을 분석할 때 위치 계산을 잘못해서 엉뚱한 데이터를 읽을 수 있었습니다. 이번 수정으로 큰 패킷도 올바른 위치를 계산하도록 고쳐졌습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: flow_dissector: avoid u16 truncation of skb->len when computing thoff __skb_flow_dissect() computes key_control->thoff using: key_control->thoff = min_t(u16, nhoff, skb ? skb->len : hlen); min_t(u16, ...) casts both arguments to u16 before comparing them. Whenever skb->len (or hlen) modulo 65536 is smaller than nhoff, the truncated length wins and thoff is set to a bogus small value, even when the dissection succeeded. For example, an IPv4/TCP frame with skb->len == 65540 and nhoff == 34 gets thoff == 4, so callers such as skb_probe_transport_header() point the transport header inside the Ethernet header. Such skbs are not exotic: - At the time of commit d0c081b49137 ("flow_dissector: properly cap thoff field"), AF_PACKET with PACKET_VNET_HDR could already build GSO skbs larger than 64KB (MTU checks are skipped for GSO, and alloc_skb_with_frags() accepted up to MAX_SKB_FRAGS (17) order-0 pages on top of the linear part). - BIG TCP now makes skbs larger than 64KB common. - The following patch makes tun_get_user() dissect IFF_TAP frames before eth_type_trans() pulls the Ethernet header, so a GSO frame carrying a 65522..65535 byte L3 packet will be dissected with skb->len in [65536, 65549]. Compare as u32 instead. If the resulting offset cannot be represented in the u16 key_control->thoff, cap it to U16_MAX and report the dissection as failed rather than silently returning a wrong transport offset. thoff is still set on failure, as some callers (such as eth_get_headlen()) use it regardless of the return value.

📍 영향받는 시스템

수정 전 Linux 커널 (64KB 초과 GSO skb를 처리하는 버전, 정확한 영향 버전은 패치 커밋 기준 확인 필요)

⚔️ 공격 벡터

64KB를 넘는 조작된 GSO 프레임을 전송하여 transport header 오프셋을 잘못 계산하게 만드는 방식으로 추정되며, 로컬 AF_PACKET 또는 TAP 장치 접근이 필요할 수 있습니다.

🛡️ 대응 방법

배포판이 제공하는 최신 커널 보안 업데이트를 적용하고 시스템을 재부팅하십시오.

🔧 검증 코드

출력된 커널 버전을 배포판 보안 공지 및 해당 수정 커밋이 포함된 버전과 비교하여, 수정 버전 이상이면 패치된 것으로 판단하고 미만이면 업데이트가 필요합니다.

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel