CVE-2024-26837
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: net: bridge: switchdev: Offload durumunda ertelenmiş olayların MDB tekrarlarını atla Bu değişiklikten önce, tekrarlanacak MDB olayları listesinin oluşturulması; IGMP/MLD snooping mantığından veya kullanıcı yapılandırmasından gelen yeni grup üyeliklerinin oluşturulmasıyla yarış durumuna giriyordu. Yeni üyelikler br->mdb_list üzerinden yürütücüler için hemen görünür olsa da, varlıklarının switchdev olay abonelerine bildirimi daha sonraki bir zamana ertelenir. Bu nedenle, eğer bir tekrar listesi böyle bir pencereyle örtüşen bir zamanda oluşturulsaydı, henüz iletilmemiş olayın tekrarını da içerirdi. Böylece sürücü, köprünün dahili olarak tek bir olay olarak değerlendirdiği şeyin iki kopyasını alırdı. Köprü imha edildiğinde ise yalnızca tek bir üyelik silme olayı gönderilirdi. Bunun sonucunda, üyelikleri referans sayacıyla takip eden sürücüler (en azından DSA), köprü imha edildiğinde donanım veritabanlarında yetim gruplarla kalırdı. Bu durum yalnızca eklemelerin tekrarlanması sırasında bir sorundur. Silme olayları hala ertelenmiş kuyrukta bekliyor olsa bile, bunlar zaten br->mdb_list üzerinden kaldırılmış olacaktır, dolayısıyla bu senaryoda kopya oluşturulamaz. Bir kullanıcı için bu, önceden bir portun bağlı olduğu bir köprüden kalan eski grup üyeliklerinin, port yeni bir köprüye katıldığında, yeni köprünün bilgisi dışında (donanımda) yeniden canlanabileceği anlamına geliyordu. Örneğin, bir mv88e6xxx sisteminde, bir snooping köprüsü oluşturun ve hemen buna bir port ekleyin: root@infix-06-0b-00:~$ ip link add dev br0 up type bridge mcast_snooping 1 && \ > ip link set dev x3 up master br0 Ardından köprüyü imha edin: root@infix-06-0b-00:~$ ip link del dev br0 root@infix-06-0b-00:~$ mvls atu ADDRESS FID STATE Q F 0 1 2 3 4 5 6 7 8 9 a DEV:0 Marvell 88E6393X 33:33:00:00:00:6a 1 static - - 0 . . . . . . . . . . 33:33:ff:87:e4:3f 1 static - - 0 . . . . . . . . . . ff:ff:ff:ff:ff:ff 1 static - - 0 1 2 3 4 5 6 7 8 9 a root@infix-06-0b-00:~$ İki IPv6 grubu donanım veritabanında kalır çünkü port (x3), ana bilgisayarın üyeliği hakkında iki kez bilgilendirilir: bir kez orijinal olay yoluyla ve bir kez de tekrar yoluyla. Yalnızca tek bir silme bildirimi gönderildiğinden, köprü imha edildiğinde sayaç 1'de kalır. Ardından aynı portu (veya aynı donanım alanına ait başka bir portu), bu sefer snooping devre dışı bırakılmış şekilde yeni bir köprüye ekleyin: root@infix-06-0b-00:~$ ip link add dev br1 up type bridge mcast_snooping 0 && \ > ip link set dev x3 up master br1 br0'dan gelen iki IPv6 grubu dahil tüm multicast trafiği, br1 politikasına göre artık yayılmalıdır (flood). Ancak bunun yerine eski üyelikler donanım veritabanında hala aktiftir ve bu durum anahtarın (switch), bu gruplara yönelik trafiği yalnızca CPU'ya (port 0) yönlendirmesine neden olur. Yarış durumu iki adımda ortadan kaldırılmıştır: 1. Tekrar listesi oluşturulurken MDB'nin yazma tarafı kilidi alınır. Bu, biz tekrar listesini oluştururken yeni üyeliklerin ortaya çıkmasını engeller. Ancak, kilidi almadan önce ertelenmiş bir olayın zaten oluşturulduğu ancak iletilmediği senaryoyu açık bırakır. Bu nedenle: 2. Eklemeleri tekrarlarken, bir tekrar olayının ertelenmiş versiyonunun switchdev ertelenmiş kuyruğuna halihazırda eklenmediğinden emin olunur ve ardından tekrar listesine eklenir.
Nasıl düzeltilir
- linux linux_kernel6.1.80, 6.6.19, 6.7.7 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.13 ≤ v < 6.1.80, 6.2 ≤ v < 6.6.19, 6.7 ≤ v < 6.7.7, 6.8 | 6.1.80, 6.6.19, 6.7.7 |
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.