CVE-2026-80612 in Linux
요약
\~에 의해 VulDB • 2026. 08. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: lwtunnel: LWT 캡슐화 전에 skb 메타데이터 제거하기
skb 메타데이터는 XDP와 TC 간에 정보를 전달하는 데 사용됩니다. 이는 skb의 headroom, 즉 skb->data 바로 앞에 위치합니다. LWT 프로그램은 __sk_buff->data_meta라는 메타데이터용 의사 포인터(pseudo-pointer)에 접근할 수 없습니다.
그러나 LWT 캡슐화는 외부 헤더를 미리 붙여(skb_push), skb->data가 메타데이터가 있는 headroom 영역 위로 다시 이동하게 됩니다. XDP 메타데이터를 여전히 포함하고 있는 RX 기원(포워딩된) 패킷의 경우, encapsulation 유형에 따라 두 가지 방식으로 문제가 발생합니다:
1. 비-BPF LWT 캡슐화(mpls, seg6, ioam6 등)는 skb_push()/skb_pull()을 호출하여 headroom에 위치한 메타데이터를 묵시적으로 덮어씁니다(overwrites).
2) BPF LWT xmit은 bpf_skb_change_head()를 호출하며, 이는 skb_data_move()를 사용합니다. 해당 헬퍼 함수는 메타데이터가 skb->data 바로 앞에 있을 것을 기대합니다. 그러나 IP 출력 경로에서 LWT xmit이 실행될 때 이웃(neighbour) 출력이 아직 외부 L2 헤더를 구축하지 않았기 때문에, 포워딩된 패킷의 경우 skb->data는 L3 헤더를 가리키는 반면 skb_mac_header()는 여전히 이전의 L2 헤더를 가리킵니다. skb_data_move()는 메타데이터가 skb_mac_header()에서 끝나는 것을 보고(skb->data 앞이 아님), 경고하고 메타데이터를 지웁니다:
WARNING: CPU: 21 PID: 454557 at include/linux/skbuff.h:4609 skb_data_move+0x47/0x90 CPU: 21 UID: 0 PID: 454557 Comm: napi/iconduit-g Tainted: G O 6.18.21 #1 RIP: 0010:skb_data_move+0x47/0x90 Call Trace: <IRQ> bpf_skb_change_head+0xe6/0x1a0 bpf_prog_...+0x213/0x2e3 run_lwt_bpf.isra.0+0x1d3/0x360 bpf_xmit+0x46/0xe0 lwtunnel_xmit+0xa1/0xf0 ip_finish_output2+0x1e7/0x5e0 ip_output+0x63/0x100 __netif_receive_skb_one_core+0x85/0xa0 process_backlog+0x9c/0x150 __napi_poll+0x2b/0x190 net_rx_action+0x40b/0x7f0 handle_softirqs+0xd2/0x270 do_softirq+0x3f/0x60 </IRQ>
이것이 발생하는 현상입니다. 해결책에 관해서는, 메타데이터를 포함하는 수신 패킷은 세 가지 LWT 리디렉션 모드 중 어느 것을 통해든 캡슐화(encap) 지점에 도달할 수 있습니다:
LWTUNNEL_STATE_INPUT_REDIRECT ip6_rcv_finish dst_input lwtunnel_input
LWTUNNEL_STATE_OUTPUT_REDIRECT ip6_rcv_finish dst_input ip6_forward ip6_forward_finish dst_output lwtunnel_output
LWTUNNEL_STATE_XMIT_REDIRECT ip6_rcv_finish dst_input ip6_forward ip6_forward_finish dst_output ip6_output ip6_finish_output ip6_finish_output2 lwtunnel_xmit
모든 캡슐화(encap) 처리는 세 가지 LWT 디스패치 헬퍼 함수를 통과하므로, skb를 encapsulation 작업에 전달하기 직전에 해당 지점에서 메타데이터를 제거합니다. 이 단일 관문(chokepoint)은 모든 encapsulation 유형과 세 가지 리디렉션 모드를 모두 커버합니다:
- lwtunnel_input(): seg6, rpl, ila, seg6_local - lwtunnel_output(): ioam6 - lwtunnel_xmit(): mpls, LWT BPF xmit
또한 메타데이터를 TC ingress 훅(hook) 직후에 지우는 방법도 있습니다. 그러나 이는 타협이 필요합니다. 메타데이터는 TC egress(나가는 방향)에서 접근 불가능해집니다(경로상에 L2 터널이 없는 경우에만 실제로 해당 훅에 도달하는 설정에서의 이야기입니다).
If you want to get best quality of vulnerability data, you may have to visit VulDB.