CVE-2026-19936
Açıklama
subsys/bluetooth/mesh/delayable_msg.c dosyasındaki Bluetooth Mesh Erişim katmanı ertelenebilir mesaj kuyruğu, üç girişken listeyi (busy_ctx, free_ctx, free_chunks) ve bir k_work_delayable öğesini, herhangi bir senkronizasyon olmaksızın iki kooperatif iş parçacığı arasında paylaşmaktadır: bt_mesh_delayable_msg_manage() Bluetooth ana bilgisayar RX iş parçacığında çalışırken, delayable_msg_handler() sistem iş kuyruğunda (system workqueue) çalışır. Her ikisi de listeler ara durumdayken bloklanır —kuyruğa ekleyen bt_rand()'de, her ikisi de bt_mesh_access_send()'de— bu da diğer bağlamın bozulmuş durumu gözlemlemesine olanak tanır. delayable_msg_handler(), busy_ctx üzerinde sys_slist_get() sonucunu NULL kontrolü yapmadan kullanmış ve allocate_delayable_msg_ctx() önce sys_slist_is_empty() testini yapmış ardından ayrı bir sys_slist_get() işleminin başarılı olacağını varsaymıştır. CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG ve CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED varsayılan olarak y olduğu için, alınan bir mesh mesajına verilen her model yanıtı bu kuyruğa park edilir; dolayısıyla kuyruğa ekleme işlemi doğrudan gelen trafiğin bir sonucu olarak çalışır. Bir model tarafından kabul edilen erişim katmanı mesajları gönderebilen bir eş (NetKey'e ve bağlı bir AppKey'e sahip olmalıdır, yani meşru veya ele geçirilmiş bir ağ üyesi), varış hızını, tetiklenen yanıtların boyutunu ve hedef adresi kontrol eder ve böylece 4 girişli bağlam havuzunun ve 40 girişli parça (chunk) havuzunun doluluğunu kontrol eder. Parça havuzunun tükenmesi, bt_mesh_delayable_msg_manage() fonksiyonunu temizleme yoluna zorlar; bu işlem kuyruktaki tek mesajı gönderip serbest bırakarak, ertelenebilir iş öğesi hala kurulu durumdayken busy_ctx listesini boş bırakır; eğer kuyruğa ekleyen işlem o sırada öncelik verirse, işleyici boş liste üzerinde çalışır. Bunun sonucu, sistem iş kuyruğu iş parçacığında sabit düşük bir adreste, NULL tabanlı bir işaretçi üzerinden okuma-değiştirme-yazma (pending_msg->fired_time += 10) işlemidir. Hata veren tipik hedeflerde bu durum, tüm iş kuyruğu odaklı işlevselliği (mesh zamanlama mekanizması dahil) durduran sistem iş kuyruğu iş parçacığının sonlandırılmasına veya düğümün sıfırlanmasına neden olur; dolayısıyla etkisi etkilenen düğümün kullanılabilirliğinin kaybıdır. Yazma değeri ve adresi sabittir ve saldırgan tarafından kontrol edilen herhangi bir uzunluk veya dizin söz konusu değildir, bu nedenle bellek bozulması veya kod çalıştırma için istismar edilemez. Aynı senkronize edilmemiş pencere, bir mesaj bağlamının aynı anda iki farklı bağlam tarafından seçilip serbest bırakılmasına izin vererek yinelenen iletimlere, yinelenen gönderim tamamlama geri çağırmalarına ve çapraz parça sahipliğine yol açmıştır. Düzeltme, her liste mutasyonunu hiçbir zaman engelleyici bir çağrı sırasında tutulmayan bir k_spinlock ile serileştirir, push_msg_from_delayable_msgs() fonksiyonunun kuyruk başlığını atomik olarak ayırmasını sağlayarak gönderilen bir mesajın hiçbir listede yer almamasını sağlar, delayable_msg_handler() içerisindeki kontrolsüz sys_slist_get() işlemini kaldırır ve yığın askıya alınmışken veya sıfırlanmışken kuyruğun başına ulaşan tüm mesajları düşürür.
Nasıl düzeltilir
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | 3.6.0 ≤ v ≤ 4.4.2 | — |
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.