CVE-2026-46099 in Linux정보

요약

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

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

net: ipv6: seg6 및 rpl lwtunnels에서 NOREF dst 사용 수정

seg6_input_core() 및 rpl_input()은 ip6_route_input()를 호출하여 skb에 NOREF dst를 설정한 후, 이를 dst_cache_set_ip6()에 전달하여 dst_hold()를 조건 없이 호출합니다. PREEMPT_RT 환경에서 ksoftirqd는 프리엠프터블(preemptible)이며, 더 높은 우선순위를 가진 태스크가 공유 nexthop에 대한 동시 FIB 조회를 통해 조회 및 캐싱 단계 사이에서 하위 pcpu_rt를 해제할 수 있습니다. 단순화된 레이스 시퀀스는 다음과 같습니다:

ksoftirqd/X 더 높은 우선순위 태스크 (동일 CPU X) ----------- ------ ------ ---------- ------ ---- seg6_input_core(,skb)/rpl_input(skb) dst_cache_get() -> miss ip6_route_input(skb) -> ip6_pol_route(,skb,flags) [flags에 RT6_LOOKUP_F_DST_NOREF 포함]
-> FIB 조회가 fib6_nh를 해결함 [nhid=N 경로]
-> rt6_make_pcpu_route() [pcpu_rt 생성, refcount=1]
pcpu_rt->sernum = fib6_sernum [fib6_sernum=W]
-> cmpxchg(fib6_nh.rt6i_pcpu, NULL, pcpu_rt) [슬롯이 비어 있었으며, 저장 성공]
-> skb_dst_set_noref(skb, dst) [dst는 pcpu_rt이며, refcount는 여전히 1]

rt_genid_bump_ipv6() -> fib6_sernum 증가 [fib6_sernum이 W에서 Z로 변경]
ip6_route_output() -> ip6_pol_route() -> FIB 조회가 fib6_nh를 해결함 [nhid=N]
-> rt6_get_pcpu_route() pcpu_rt->sernum != fib6_sernum [W <> Z, stale]
-> prev = xchg(rt6i_pcpu, NULL) -> dst_release(prev) [prev는 pcpu_rt이며,
refcount가 1->0으로 감소하여 죽음]

dst = skb_dst(skb) [dst는 죽은 pcpu_rt임]
dst_cache_set_ip6(dst) -> 죽은 dst에 대한 dst_hold() -> WARN / use-after-free

이 레이스가 발생하려면 ksoftirqd가 프리엠프터블이어야 하며(PREEMPT_RT에서 PREEMPT_RT_NEEDS_BH_LOCK 없음), 동시 태스크가 pcpu_rt를 해제할 수 있어야 합니다. 공유 nexthop 객체는 이러한 경로를 제공하며, 동일한 nhid를 가리키는 두 경로는 동일한 fib6_nh 및 그 rt6i_pcpu 엔트리를 공유합니다.

seg6_input_core() 및 rpl_input()을 수정하여 ip6_route_input() 호출 후 skb_dst_force()를 호출함으로써, 캐싱 전에 NOREF dst를 refcounted dst로 강제 변환합니다. 출력 경로는 영향을 받지 않습니다. ip6_route_output()은 이미 refcounted dst를 반환하기 때문입니다.

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

책임이 있는

Linux

예약하다

2026. 05. 13.

모더레이션

수락

항목

VDB-366321

EPSS

0.00072

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!