CVE-2026-46099
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: net: ipv6: seg6 ve rpl lwtunnels içindeki NOREF dst kullanımı düzeltildi seg6_input_core() ve rpl_input(), skb üzerinde bir NOREF dst ayarlayan ip6_route_input() fonksiyonunu çağırır ve ardından bunu koşulsuz olarak dst_hold() işlemini başlatan dst_cache_set_ip6() fonksiyonuna iletir. PREEMPT_RT üzerinde ksoftirqd kesilebilir durumdadır ve daha yüksek öncelikli bir görev, paylaşılan bir nexthop üzerinden eşzamanlı bir FIB araması yaparak, arama ve önbelleğe alma işlemleri arasında temel pcpu_rt'yi serbest bırakabilir. Basitleştirilmiş yarış durumu dizisi: ksoftirqd/X yüksek öncelikli görev (aynı CPU X) ----------- -------------------------------- seg6_input_core(,skb)/rpl_input(skb) dst_cache_get() -> ıskalama (miss) ip6_route_input(skb) -> ip6_pol_route(,skb,flags) [flag'lerde RT6_LOOKUP_F_DST_NOREF var] -> FIB araması fib6_nh sonucunu döndürür [nhid=N rotası] -> rt6_make_pcpu_route() [pcpu_rt oluşturur, refcount=1] pcpu_rt->sernum = fib6_sernum [fib6_sernum=W] -> cmpxchg(fib6_nh.rt6i_pcpu, NULL, pcpu_rt) [yuva boştu, depolama başarılı] -> skb_dst_set_noref(skb, dst) [dst, pcpu_rt'dir, refcount hala 1] rt_genid_bump_ipv6() -> fib6_sernum değerini artırır [fib6_sernum W'den Z'ye] ip6_route_output() -> ip6_pol_route() -> FIB araması fib6_nh sonucunu döndürür [nhid=N] -> rt6_get_pcpu_route() pcpu_rt->sernum != fib6_sernum [W <> Z, bayat] -> prev = xchg(rt6i_pcpu, NULL) -> dst_release(prev) [prev, pcpu_rt'dir, refcount 1->0, ölü] dst = skb_dst(skb) [dst, ölü pcpu_rt'dir] dst_cache_set_ip6(dst) -> ölü dst üzerinde dst_hold() -> WARN / serbest bırakıldıktan sonra kullanım (use-after-free) Yarış durumunun oluşması için ksoftirqd'nin kesilebilir olması (PREEMPT_RT_NEEDS_BH_LOCK olmadan PREEMPT_RT) ve eşzamanlı bir görevin pcpu_rt'yi serbest bırakabilmesi gerekir. Aynı nhid'ye işaret eden iki rota aynı fib6_nh ve onun rt6i_pcpu girdisini paylaştığından, paylaşılan nexthop nesneleri böyle bir yol sağlar. Önbelleğe almadan önce NOREF dst'yi referans sayımlı bir dst'ye zorlamak için ip6_route_input() sonrası skb_dst_force() çağrılarak seg6_input_core() ve rpl_input() düzeltilmiştir. ip6_route_output() zaten referans sayımlı bir dst döndürdüğü için çıkış yolu etkilenmemektedir.
Nasıl düzeltilir
- linux linux_kernel5.15.209, 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 4.12 ≤ v < 5.15.209, 5.16 ≤ v < 6.1.175, 6.2 ≤ v < 6.6.140, 6.7 ≤ v < 6.12.86, 6.13 ≤ v < 6.18.27, 6.19 ≤ v < 7.0.4, 7.1 | 5.15.209, 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.