🇰🇷 한글 설명
Linux 커널의 icmp_send 트레이스포인트에서 유효하지 않은 전송 헤더에 접근하여 발생하는 취약점입니다. 특정 네트워크 경로(링크 실패, ARP 오류 등)에서 전송 헤더가 초기화되지 않은 상태로 UDP 헤더를 참조하려 할 때 경고가 발생합니다.
💡 쉬운 설명
네트워크 통신 기록을 남기는 과정에서, 데이터의 형식을 확인하지 않고 잘못된 위치의 정보를 읽으려다 발생하는 오류입니다. 이로 인해 시스템 경고가 발생하거나 예기치 않은 동작이 일어날 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: icmp: avoid invalid transport header access in icmp_send tracepoint
syzbot reported a WARNING triggered by DEBUG_NET_WARN_ON_ONCE():
WARNING: at skb_transport_header include/linux/skbuff.h:3087 [inline]
WARNING: at udp_hdr include/linux/udp.h:23 [inline]
WARNING: at do_trace_event_raw_event_icmp_send include/trace/events/icmp.h:30 [inline]
WARNING: at trace_event_raw_event_icmp_send+0x48c/0x6ec include/trace/events/icmp.h:11
Call trace:
skb_transport_header include/linux/skbuff.h:3087 [inline]
udp_hdr include/linux/udp.h:23 [inline]
do_trace_event_raw_event_icmp_send include/trace/events/icmp.h:30 [inline]
trace_event_raw_event_icmp_send+0x48c/0x6ec include/trace/events/icmp.h:11
__traceiter_icmp_send include/trace/events/icmp.h:11 [inline]
__do_trace_icmp_send include/trace/events/icmp.h:11 [inline]
trace_icmp_send+0x320/0x49c include/trace/events/icmp.h:11
__icmp_send+0xcfc/0x11d8 net/ipv4/icmp.c:1013
ipv4_send_dest_unreach net/ipv4/route.c:1280 [inline]
ipv4_link_failure+0x57c/0x8dc net/ipv4/route.c:1287
dst_link_failure include/net/dst.h:438 [inline]
vti_tunnel_xmit+0xe40/0x17a4 net/ipv4/ip_vti.c:307
TP_fast_assign() unconditionally calls udp_hdr(skb) before checking
whether the packet is UDP. Furthermore, __icmp_send() can be invoked
from paths (e.g., link failures, ARP errors, forwarding, AF_PACKET)
where skb->transport_header was never initialized (~0U).
Under CONFIG_DEBUG_NET=y, calling skb_transport_header(skb) triggers
DEBUG_NET_WARN_ON_ONCE(!skb_transport_header_was_set(skb)).
Fix this by:
1. Only parsing transport info when iph->protocol == IPPROTO_UDP.
2. Using skb_header_pointer() at skb_network_offset(skb) + (iph->ihl << 2)
to safely fetch the UDP header without assuming transport_header is set.
📍 영향받는 시스템
Linux Kernel (CONFIG_DEBUG_NET=y 설정이 활성화된 환경)
⚔️ 공격 벡터
네트워크 링크 실패나 ARP 오류 등을 유도하여 커널의 ICMP 전송 경로를 실행시키는 방식
🛡️ 대응 방법
커널 패치를 통해 UDP 프로토콜인 경우에만 전송 정보를 파싱하고, 안전한 헤더 참조 함수(skb_header_pointer)를 사용하도록 업데이트해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.