🇰🇷 한글 설명
Linux 커널의 IPv4 ICMP 처리 과정에서 icmp_route_lookup() 함수가 도달할 수 없는 경로(RTN_UNREACHABLE)를 적절히 거부하지 못하는 취약점입니다. 이로 인해 잘못된 경로 정보가 출력 경로로 사용되어 커널 내에서 경고(WARNING)가 발생할 수 있습니다.
💡 쉬운 설명
인터넷 통신 경로를 찾는 과정에서 '갈 수 없는 길'을 '갈 수 있는 길'로 잘못 판단하여 시스템에 오류 경고를 일으키는 문제입니다. 이는 네트워크 설정 오류나 특정 패킷을 통해 시스템 로그에 경고를 남길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ipv4: icmp: reject RTN_UNREACHABLE input routes in icmp_route_lookup
When the forward output route cannot be used in icmp_route_lookup(),
it enters the "reverse path" and calls ip_route_input() on fl4_dec.daddr,
the original packet's source address.
ip_route_input() only returns an error for truly invalid packets. For
unreachable addresses it will succeed and return an input route whose
dst.output is set to ip_rt_bug(). The existing check only rejects
RTN_LOCAL routes, so the RTN_UNREACHABLE route types can still be returned
and later used for output, syzkaller triggering a WARN_ON_ONCE()
in ip_rt_bug() as bellow:
------------[ cut here ]------------
WARNING: net/ipv4/route.c:1273 at ip_rt_bug+0x14/0x20
RIP: 0010:ip_rt_bug+0x14/0x20
Call Trace:
ip_push_pending_frames+0xfa/0x100
__icmp_send+0x905/0xf10
ip_options_compile+0xc0/0xd0
ip_rcv_finish_core+0x321/0xae0
ip_rcv+0x1de/0x260
__netif_receive_skb_one_core+0x11a/0x130
netif_receive_skb+0x7b/0x260
tun_get_user+0x11bf/0x1c10
------------[ cut here ]------------
Reject input route that is RTN_UNREACHABLE to fix it. The net warning
is only printed for RTN_LOCAL, as RTN_UNREACHABLE is not the result of
a race condition.
📍 영향받는 시스템
Linux Kernel (IPv4 ICMP stack 관련 버전)
⚔️ 공격 벡터
특수하게 조작된 ICMP 패킷을 전송하여 커널의 라우팅 경로 탐색 로직을 트리거함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 RTN_UNREACHABLE 경로를 거부하도록 수정함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux