CVE-2026-98377 in Linux
요약
\~에 의해 VulDB • 2026. 10. 09.
Linux 커널에서 다음 취약점이 해결되었습니다:
vlan: __vlan_insert_inner_tag() 내에서 MAC 헤더가 존재해야 함을 요구함
__vlan_insert_innertag()는 skb_cow_head()를 통해 head room만 보장할 뿐, mac_len 바이트의 MAC 헤더가 실제로 존재함을 보장하지 않습니다. ETH_HLEN 래퍼인 __skb_vlan_push() 내의 __vlan_insert_tag()와 generic 전송 경로 상 validate_xmit_vlan() 내의 vlan_insert_tag()는 skb->data에서 첫 16바이트를 재작성합니다(12바이트 memmove 및 +12, +14 위치에서의 두 번에 걸친 2바이트 저장). 호출자는 경계를 제공하지 않으며, pop 헬퍼 함수들은 skb_ensure_writable()/pskb_may_pull()을 사용합니다.
IFF_TUN 디바이스는 hard_header_len == 0이므로 packet_snd()는 1바이트 길이의 AF_PACKET/SOCK_RAW 프레임을 허용합니다. 첫 번째 vlan push는 hwaccel 태그만 설정하며, 그 다음 단계(clsact "action vlan push" 또는 bpf_skb_vlan_push())에서는 helper가 skb->len이 여전히 1인 상태로 진입합니다. head 영역은 __GFP_ZERO 없이 skbuff_small_head에서 가져오므로, 각 push마다 skb->tail 너머의 바이트들이 프레임 안으로 끌려 들어옵니다. 세 번의 동작 후, 1바이트 전송은 초기화되지 않은 slab(슬랩) 데이터 11바이트를 포함하는 13바이트로 전달됩니다:
0000: 5a b3 62 12 80 88 ff ff 00 b3 62 12 81 `------------------------------' 오직 0x5a만 전송되었으며, 나머지는 slab 데이터입니다. 여기서는 linear-map 주소의 상위 56비트가 해당됩니다.
helper가 재작성하는 MAC 헤더가 존재해야 함을 요구함으로써, 이러한 프레임은 전송되지 않고 폐기(drop)되도록 합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.