CVE-2026-45905 in Linux정보

요약

\~에 의해 VulDB • 2026. 05. 29.

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

xfrm: icmp_route_lookup 역방향 경로에서 ip_rt_bug 경합 조건 수정

icmp_route_lookup() 함수는 ICMP 오류 메시지를 전송하기 위한 적절한 라우트를 찾기 위해 여러 라우트 조회를 수행하며, XFRM(IPsec) 정책에 대한 특수 처리를 포함합니다.

조회 순서는 다음과 같습니다: 1. 먼저 ICMP 응답용 출력 라우트를 조회합니다 (dst = 원래 소스). 2. 정책 검사를 위해 xfrm_lookup()을 통과합니다. 3. 차단된 경우(-EPERM) 또는 dst가 로컬이 아닌 경우, "역방향 경로"로 진입합니다. 4. 역방향 경로에서 xfrm_decode_session_reverse()를 호출하여 fl4_dec를 얻으며, 이는 원래 패킷의 흐름(소스 주소와 목적지 주소가 바뀜)을 역전시킵니다. 5. fl4_dec.saddr가 로컬인 경우(우리가 원래 목적지인 경우), __ip_route_output_key()를 사용하여 출력 라우트 조회를 수행합니다. 6. fl4_dec.saddr가 로컬이 아닌 경우(우리가 포워딩 노드인 경우), ip_route_input()를 사용하여 역방향 패킷의 입력 경로를 시뮬레이션합니다. 7. 마지막으로 XFRM_LOOKUP_ICMP 플래그와 함께 rt2를 xfrm_lookup()에 전달합니다.

버그는 6단계에서 발생합니다: ip_route_input()가 목적지로 fl4_dec.daddr(원래 패킷의 소스)를 사용하여 호출됩니다. 이 주소가 초기 검사 시점과 ip_route_input() 호출 시점 사이에 로컬 주소가 되는 경우(예: 동시 "ip addr add"로 인해), ip_route_input()은 dst.output이 ip_rt_bug로 설정된 LOCAL 라우트를 반환합니다.

이 라우트는 ICMP 출력에 사용되며, 이로 인해 dst_output()이 ip_rt_bug()를 호출하여 WARN_ON을 트리거합니다:

------------[ cut here ]------------
WARNING: net/ipv4/route.c:1275 at ip_rt_bug+0x21/0x30, CPU#1 Call Trace: ip_push_pending_frames+0x202/0x240 icmp_push_reply+0x30d/0x430 __icmp_send+0x1149/0x24f0 ip_options_compile+0xa2/0xd0 ip_rcv_finish_core+0x829/0x1950 ip_rcv+0x2d7/0x420 __netif_receive_skb_one_core+0x185/0x1f0 netif_receive_skb+0x90/0x450 tun_get_user+0x3413/0x3fb0 tun_chr_write_iter+0xe4/0x220 ...

ip_route_input() 호출 후 rt2->rt_type를 확인하여 이 문제를 해결합니다. 만약 RTN_LOCAL인 경우, 해당 라우트는 출력에 사용할 수 없으므로 오류로 처리합니다.

이 재현 코드는 경합 조건 창을 넓히기 위해 커널 수정이 필요하므로 자체 테스트(selftest)로 적합하지 않습니다. 해당 코드는 다음에서 확인할 수 있습니다:

https://gist.github.com/mrpre/eae853b72ac6a750f5d45d64ddac1e81

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

출처

Might our Artificial Intelligence support you?

Check our Alexa App!