CVE-2026-80905 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: tap: VLAN 태그가 있는 프레임 전송 시 잘못된 transport_header 수정
tap_get_user_xdp() 함수 내에서 VLAN 태그가 있는 프레임(예: ETH_P_8021Q)을 처리할 때, skb_set_network_header()이 먼저 호출되어 network_header를 VLAN 태그 건너뛰기 안쪽 프로토콜 헤더로 이동시킵니다. 그 후, nhoff(skb_network_offset()에서 파생됨)는 이미 VLAN 태그를 넘어선 안쪽 프로토콜 헤더를 가리키고 있는 반면, skb->protocol은 여전히 ETH_P_8021Q로 설정된 상태에서 skb_probe_transport_header()가 호출됩니다.
__skb_flow_dissect() 내에서 proto는 ETH_P_8021Q로 초기화되고 nhoff는 VLAN 태그를 넘어선 지점을 가리킵니다. 디섹터(분해기)가 case ETH_P_8021Q에 도달하면, __skb_header_pointer()를 통해 현재 nhoff 위치에서 struct vlan_hdr을 읽습니다. 그러나 해당 오프셋에는 안쪽 프로토콜 헤더(IP 헤더 등)가 포함되어 있습니다. 바이트들이 VLAN 헤더로 잘못 해석되어 알려진 어떤 프로토콜과도 일치하지 않는 무의미한(encapsulated EtherType이 생성됩니다. 디섹터는 false를 반환하므로, skb_probe_transport_header()는 결코 skb_set_transport_header()를 호출하지 않으며, transport_header는 초기화되지 않은 센티널 값(~0U)으로 남습니다.
skb_probe_transport_header()가 호출될 때 network_header가 여전히 VLAN 헤더(오프셋 ETH_HLEN)를 가리키도록 skb_set_network_header()의 위치를 변경합니다. 이렇게 하면 nhoff가 정확해지고 흐름 디섹터(flow dissector)가 VLAN 헤더를 파싱하여 안쪽 EtherType을 추출한 후, nhoff를 안쪽 프로토콜 헤더로 이동시켜 transport_header가 올바르게 설정되도록 합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.