CVE-2026-98271 in Linux정보

요약

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

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

net: skbuff: pskb_carve() 후 stale header offsets를 남기지 마십시오

pskb_carve_inside_header() 및 pskb_carve_inside_nonlinear() 함수는 패킷의 첫 바이트들을 제거하고 skb->head를 재할당합니다.

작업 전에 존재했던 모든 헤더들은 사라졌지만, 두 함수 모두 skb_headers_offset_update(skb, 0)을 호출하며 이는 no-op입니다: skb->mac_header, skb->network_header, skb->transport_header 및 skb->csum_start는 이전 값을 유지한 채 더 이상 존재하지 않는 바이트들을 설명하게 됩니다.

두 헬퍼 함수는 새로운 head의 크기를 기존 skb_end_offset()에서 산출하므로, stale offsets들은 여전히 새 할당 영역 내에 위치합니다. 그러나 이들은 skb_tail_pointer()를 지나서 초기화되지도 않은 바이트들을 가리킵니다.

pskb_carve_inside_nonlinear()가 가장 나쁜 경우인데, 이는 선형 부분이 비어 있는 zombie skb(skb->data == skb_tail_pointer(skb), skb_headlen(skb) == 0)를 남기며, skb_mac_header_was_set()는 여전히 참이고 skb->mac_header이 skb->data보다 훨씬 앞에 위치하기 때문입니다.

pskb_extract()의 유일한 사용자는 rds_tcp_data_recv()이며, carve된 skb는 tinc->ti_skb_list에 큐잉됩니다. RDS 수신 메시지가 해제될 때 rds_tcp_inc_free()가 skb_queue_purge()를 호출하여 SKB_DROP_REASON_QUEUE_PURGE로 skbs들을 해제합니다. 이는 drop_monitor에서 관찰 가능하며, 이후 bogus mac header로 다시 pull하려고 시도합니다:

skbuff: __skb_pull(len=234) skb len=6968 data_len=6968 headroom=0 headlen=0 tailroom=0 end-tail=384 mac=(234,14) mac_len=14 net=(248,40) trans=288 shinfo(txflags=0 nr_frags=1 gso(size=1428 type=16 segs=5)) csum(0x100120 start=288 offset=16 ip_summed=3 complete_sw=0 valid=1 level=0) hash(0x7b446c6c sw=0 l4=1) proto=0x86dd pkttype=0 iif=60 kernel BUG at ./include/linux/skbuff.h:2847!

mac 및 transport headers가 설정되지 않았음을 표시하고, network header를 리셋하며, skb->mac_len을 지우고, 이제 의미가 없는 CHECKSUM_PARTIAL(csum_start이 더 이상 무엇을 설명하지 않음)를 해제하기 위해 skb_carve_reset_headers()를 추가합니다.

내부 offsets들도 무효화합니다. mac_header 및 transport_header와는 달리 이들은 "unset" sentinel 값이 없으므로, 남아있는 0이 아닌 값은 여전히 실제 헤더처럼 보입니다. skb->inner_mac_header, skb->inner_network_header, skb->inner_transport_header, skb->inner_protocol 및 skb->encapsulation을 0으로 설정하여 모든 header state를 한 곳에서 무효화합니다.

v2: 부정확한 changelog 수정. stale offsets는 새 skb->head 내에 남아있는데(이는 기존 것보다 작지 않음), 단순히 사라진 바이트들을 가리키기 위해 skb_tail_pointer()를 지나갑니다. 이 점을 고집해 준 Xuanqiang Luo에게 감사드립니다. 또한 netdev AI 리뷰에서 제안된 대로 inner header state도 무효화합니다: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260911114922.621937-1-edumazet%40google.com

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-414018

EPSS

0.00175

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!