CVE-2025-38248
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: bridge: mcast: marşrutlaşdırıcı portunun konfiqurasiyası zamanı yaranan use-after-free xətasının düzəldilməsi Bridge, arxasında multicast marşrutlaşdırıcısının yerləşdiyi portların qlobal siyahısını saxlayır. Multicast paketlərinin, hətta portlar uyğun MDB girişinin üzvü olmadıqda belə, bu portlara yönləndirildiyindən əmin olmaq üçün yönləndirmə zamanı bu siyahıya müraciət edilir. Hər VLAN üçün multicast snooping aktiv edildikdə, hər bir portda port bazlı multicast konteksti deaktiv edilir və port qlobal marşrutlaşdırıcı port siyahısından çıxarı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 Lakin, hər VLAN üçün multicast snooping aktiv olduqda belə, port yenidən qlobal siyahıya əlavə edilə bilər: # 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-indən etibarən, hər VLAN üçün multicast snooping aktiv olduqda, portda multicastın deaktiv edilməsi per-port kontekstini deyil, per-{port, VLAN} multicast kontekstlərini deaktiv edir. Nəticədə, port silindikdən sonra belə qlobal marşrutlaşdırıcı port siyahısında qalır. Bu, siyahı gəzildikdə (məsələn, siyahıya yeni port əlavə edilərkən) use-after-free [1] xətasına səbəb olur: # 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 Bənzər şəkildə, hər VLAN üçün olan marşrutlaşdırıcı port siyahısında da köhnəlmiş girişlər tapıla bilər. Hər VLAN üçün multicast snooping deaktiv edildikdə, hər bir portda per-{port, VLAN} kontekstləri deaktiv edilir və port hər VLAN üçün olan marşrutlaşdırıcı port siyahısından çıxarı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 Lakin, hər VLAN üçün multicast snooping deaktiv olduqda belə, port yenidən hər VLAN üçün olan siyahıya əlavə edilə bilər: # 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 portdan silindikdə, VLAN-da multicast snooping aktiv olmadığı üçün per-{port, VLAN} multicast konteksti deaktiv edilməyəcək. Nəticədə, port artıq VLAN-ın üzvü olmadıqda belə, hər VLAN üçün olan marşrutlaşdırıcı port siyahısında qalacaq. Bu, siyahı gəzildikdə (məsələn, siyahıya yeni port əlavə edilərkən) use-after-free [2] xətasına səbəb olur: # 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 problemlər br_multicast_port_ctx_deinit() funksiyasında portu müvafiq (qlobal və ya hər VLAN üçün olan) marşrutlaşdırıcı port siyahısından çıxarmaqla həll edilmişdir. Funksiya, port silinməsi zamanı per-port multicast konteksti ilə və VLAN silinməsi zamanı per-{port, VLAN} multicast konteksti ilə çağırılır. Qeyd edin ki, multicast marşrutlaşdırıcı taymerinin silinməsi kifayət deyil, çünki o, yalnız müvəqqəti multicast marşrutlaşdırıcı vəziyyətləri (1 və ya 3) tənzimləyir, daimi vəziyyəti (2) isə tənzimləmir. [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---
Necə düzəltmək olar
- linux linux_kernel6.15.5 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.15 ≤ v < 6.15.5, 6.16 | 6.15.5 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.