CVE-2026-12365
Açıklama
Zephyr ikinci nesil iş kuyruğunda (kernel/work.c), ertelenebilir iş zaman aşımı işlemleri sırasında bir serbest bırakıldıktan sonra kullanım (use-after-free) durumu mevcuttur. Ertelenebilir bir iş öğesinin zaman aşımı kuyruktan çıkarıldığında ve işlemcisi work_timeout() yürütülürken (iş kuyruğu spinlock'unu almaya çalışırken engellendiğinde), eşzamanlı bir iptal işlemi bu işlemcinin bitmesini beklemez. unschedule_locked() fonksiyonundaki düzeltme öncesi kod z_abort_timeout() fonksiyonunu çağırıyordu; bu fonksiyon halihazırda duyuru yapan bir kayıt için kaydı kaldırmadan -EINVAL döndürür; ardından cancel_async_locked() işi boşta olarak görür, böylece k_work_cancel_delayable_sync() ve k_work_flush_delayable() bile yürütülen işlemci üzerinde engellenmeden döner. Çekirdek başlık dosyaları, k_work_delayable nesnesini serbest bırakmadan önce iptal etmenin güvenli yolu olarak bu API'leri belgelediği için, başarılı bir senkronize iptalin hemen ardından nesneyi serbest bırakan bir çağrıcı, hala bekleyen işlemci ile yarış durumuna girebilir. work_timeout() daha sonra serbest bırakılan kayda erişmeye çalışır: z_is_timeout_handler_canceled() aracılığıyla to->dticks değerini okur ve eğer serbest bırakılan yuva yeniden kullanılmışsa ve iptal kontrolü başarısız olursa, wp->flags (K_WORK_DELAYED_BIT) üzerinde bir oku-değiştir-yaz işlemi gerçekleştirir ve güncelliğini yitirmiş bir dw->queue işaretçisine karşı iş gönderir; bu da bir serbest bırakıldıktan sonra kullanım okuma ve yazma işlemidir. k_work API'si yalnızca çekirdek modundadır (__syscall giriş noktası yoktur), dolayısıyla bu kullanıcı alanı yetki yükseltmesinden ziyade çekirdek içi bir eşzamanlılık kusurudur. Bunu tetiklemek için bir SMP derlemesi ve zaman aşımı duyurulurken dar pencerede ertelenebilir bir iş öğesini planlayan ve ardından serbest bırakan (veya yeniden planlayan) bir alt sistem gerekir; bu tür bir yıkımın zamanlamasını etkileyebilen bir saldırganın (örneğin alt sistem zamanlayıcılarını yönlendiren bağlantı sirkülasyonu yoluyla) makul ancak olasılıksal bir yolu vardır. Etkisi, çekirdek bellek bozulması veya çökmedir (hizmet reddi). Düzeltme, unschedule_locked() fonksiyonunun, herhangi bir yürütülen işlemci tamamlanana kadar iş spinlock'unu serbest bırakıp tekrar alarak z_try_abort_timeout() fonksiyonundan -EAGAIN dönmesi üzerine dönerek beklemesini sağlar ve work_timeout() fonksiyonunu atomik K_WORK_DELAYED_BIT sahipliğine geçirir. Bu, hem serbest bırakma sonrası işlemci kullanımından kaynaklanan serbest bırakıldıktan sonra kullanım hatasını hem de ilgili erken ateşleme yeniden planlama yarışını giderir.
Nasıl düzeltilir
- zephyrproject zephyr4.5.0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | 2.6.0 ≤ v < 4.5.0 | 4.5.0 |
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.