CVE-2025-38248
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: bridge: mcast: yönlendirici port yapılandırması sırasında serbest bırakıldıktan sonra kullanım (use-after-free) hatasının düzeltilmesi Bridge, arkasında bir multicast yönlendiricinin bulunduğu portların küresel bir listesini tutar. Bu liste, iletme işlemi sırasında, portlar eşleşen MDB girdisinin üyesi olmasa bile multicast paketlerinin bu portlara iletilmesini sağlamak için kontrol edilir. Per-VLAN multicast snooping etkinleştirildiğinde, her port üzerindeki per-port multicast bağlamı devre dışı bırakılır ve port küresel yönlendirici port listesinden kaldırılır: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 # ip link add name dummy1 up master br1 type dummy # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 1 $ bridge -d mdb show | grep router Ancak, per-VLAN multicast snooping etkin olduğunda bile port küresel listeye yeniden eklenebilir: # ip link set dev dummy1 type bridge_slave mcast_router 0 # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions") commit'inden beri, per-VLAN multicast snooping etkin olduğunda, bir portta multicast özelliğinin devre dışı bırakılması per-port olanı değil, per-{port, VLAN} multicast bağlamlarını devre dışı bırakır. Sonuç olarak, bir port silindikten sonra bile küresel yönlendirici port listesinde kalmaya devam eder. Bu durum, liste üzerinde geziniyken (örneğin listeye yeni bir port eklerken) bir serbest bırakıldıktan sonra kullanım (use-after-free) [1] hatasına yol açar: # ip link del dev dummy1 # ip link add name dummy2 up master br1 type dummy # ip link set dev dummy2 type bridge_slave mcast_router 2 Benzer şekilde, per-VLAN yönlendirici port listesinde de güncelliğini yitirmiş girdiler bulunabilir. Per-VLAN multicast snooping devre dışı bırakıldığında, her portta per-{port, VLAN} bağlamları devre dışı bırakılır ve port per-VLAN yönlendirici port listesinden kaldırılır: # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 # ip link add name dummy1 up master br1 type dummy # bridge vlan add vid 2 dev dummy1 # bridge vlan global set vid 2 dev br1 mcast_snooping 1 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 0 $ bridge vlan global show dev br1 vid 2 | grep router Ancak, per-VLAN multicast snooping devre dışı olduğunda bile port per-VLAN listesine yeniden eklenebilir: # bridge vlan set vid 2 dev dummy1 mcast_router 0 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 VLAN porttan silindiğinde, VLAN üzerinde multicast snooping etkin olmadığı için per-{port, VLAN} multicast bağlamı devre dışı bırakılmaz. Sonuç olarak, port artık VLAN üyesi olmasa bile per-VLAN yönlendirici port listesinde kalır. Bu durum, liste üzerinde geziniyken (örneğin listeye yeni bir port eklerken) bir serbest bırakıldıktan sonra kullanım (use-after-free) [2] hatasına yol açar: # ip link add name dummy2 up master br1 type dummy # bridge vlan add vid 2 dev dummy2 # bridge vlan del vid 2 dev dummy1 # bridge vlan set vid 2 dev dummy2 mcast_router 2 Bu sorunlar, br_multicast_port_ctx_deinit() fonksiyonunda portun ilgili (küresel veya per-VLAN) yönlendirici port listesinden kaldırılarak çözülmüştür. Fonksiyon; port silme işlemi sırasında per-port multicast bağlamıyla ve VLAN silme işlemi sırasında per-{port, VLAN} multicast bağlamıyla çağrılmaktadır. Multicast yönlendirici zamanlayıcısını silmenin yeterli olmadığı, çünkü bunun yalnızca geçici multicast yönlendirici durumlarını (1 veya 3) kapsadığı, kalıcı durumu (2) kapsamadığı unutulmamalıdır. [1] BUG: KASAN: slab-out-of-bounds in br_multicast_add_router.part.0+0x3f1/0x560 Write of size 8 at addr ffff888004a67328 by task ip/384 [...] Call Trace: <TASK> dump_stack ---truncated---
Nasıl düzeltilir
- linux linux_kernel6.15.5 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 | 5.15 ≤ v < 6.15.5, 6.16 | 6.15.5 |
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.