CVE-2026-89596
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: forcedeth: PCI dışı yapılandırma alanı kaydedilirken/geri yüklenirken oluşan bir sayısal hata (off-by-one) düzeltildi nv_suspend() ve nv_resume() fonksiyonları, PCI dışı yapılandırma alanını şu döngü ile taramaktadır: for (i = 0; i <= np->register_size/sizeof(u32); i++) Bu işlem, bir iterasyon fazla çalışmaktadır. saved_config_space şu şekilde tanımlanmıştır: u32 saved_config_space[NV_PCI_REGSZ_MAX/4]; NV_PCI_REGSZ_VER3 değeri NV_PCI_REGSZ_MAX (0x604) değerine eşit olduğundan, bir VER3 cihazında register_size/sizeof(u32) tam olarak dizi uzunluğuna eşittir ve son iterasyon dizinin sonunun bir ötesindeki elemana erişmektedir. Erişilen eleman np->name_rx[0..3] kısmıdır: saved_config_space[] dizisini hemen ardından char name_rx[IFNAMSIZ + 3] takip etmektedir ve char tipi için dolguya (padding) gerek yoktur. Bu durum gözlemlenebilir herhangi bir bozulmaya yol açmamaktadır çünkü nv_request_irq(), name_rx değişkenini request_irq()'ye aktarmadan önce sprintf() ile yeniden yazmaktadır. Hata, UBSAN tarafından raporlanan ve CONFIG_UBSAN_TRAP=y ayarı ile çalışan çekirdek kodunu durduran bir tuzağa (trap) dönüşen sınır dışı erişimin kendisidir; ayrıca sürücünün eşlediği aralığın bir dword ötesinde olan base + 0x604 adresine bir MMIO okuma işlemi ve geri yükleme sırasında bir MMIO writel() işlemi gerçekleştirilmektedir: np->base = ioremap(addr, np->register_size); VER1 ve VER2 cihazları dizi içinde kalmakta ancak onlar da kendi pencerelerinin bir dword ötesinde hatalı okuma ve yazma işlemlerine maruz kalmaktadır. Hata, derin bir S3 döngüsü sırasında Apple Macmini3,1 (MCP79) üzerinde UBSAN tarafından tespit edilmiştir. Aşağıdaki yığın izi kısaltılmıştır: dosya adındaki derleme yolu, CPU ve taint satırları, Workqueue satırı, "?" ipucu çerçeveleri ve device_suspend altındaki çerçeveler çıkarılmıştır. Çekirdek, ağaç dışı (out-of-tree) bir nouveau ve CPU_OUT_OF_SPEC ile kirletilmişti (tainted); forcedeth ise standart modüldü. UBSAN: array-index-out-of-bounds in drivers/net/ethernet/nvidia/forcedeth.c:6225:25 index 385 is out of range for type 'u32 [385]' Call Trace: dump_stack_lvl+0x5d/0x80 ubsan_epilogue+0x5/0x2b __ubsan_handle_out_of_bounds.cold+0x54/0x59 __this_module+0xe398c/0xe9010 [forcedeth] pci_pm_suspend+0x80/0x170 dpm_run_callback+0x51/0x160 device_suspend+0x1a2/0x4a0 ... Her iki döngü de etkilenmektedir. UBSAN her kaynak konumunu modül başına yalnızca bir kez raporlar (__ubsan_handle_out_of_bounds() fonksiyonu, struct source_location üzerinde test_and_set_bit(REPORTED_BIT, ...) işlemini yapan suppress_report()'u çağırır), bu nedenle iki hata raporu modül yüklendikten sonraki ilk S3 döngüsünde ortaya çıkmış, sonraki döngülerde erişim hala sınırların dışına çıksa bile sessiz kalınmıştır. İlk döngüde 6225. satır pci_pm_suspend üzerinden ve 6240. satır pci_pm_resume üzerinden raporlanmıştır. Aynı sayısal hata, 2012 yılında ba9aa134287f ("forcedeth: fix buffer overflow") commit'i ile nv_get_regs() fonksiyonunda düzeltilmişti; ancak bu iki döngü gözden kaçmıştı. Askıya alma (suspend) ve geri yükleme (resume) tarafı Eylül 2013'te Marc Weber tarafından aynı analiz ve tek karakterlik aynı düzeltme önerisiyle LKML'de bildirilmiş, fakat yama metin içine eklenmek yerine ek dosya olarak gönderildiği için konu orada kapanmıştı. Tam olarak register_size baytını kaydedip geri yüklemek için <= yerine < operatörü kullanılmıştır.
Nasıl düzeltilir
- Linux Linuxeffd589568b2c4399894a23000286210c60af6d7, 702aa4a44c87026b97b1da5c5ca80e1fa8a9875a, fc71c6c3d3e3bb17474dcd1162aea6783a452a64, c4d5953582463f45e48b14ef9815e5fb636f7e1f, 9379f8527ca60d92715c90b32f1b477de9ec32cb, 0c3f4544ff3873594c8af1b907b4ac4e6d5ce005, c4f196bfeedd71e56aba4b63bd8f919edb2f7056, 9393f1d656a79693e0c123ff7bc7c5c0f708046d ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < effd589568b2c4399894a23000286210c60af6d7, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < 702aa4a44c87026b97b1da5c5ca80e1fa8a9875a, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < fc71c6c3d3e3bb17474dcd1162aea6783a452a64, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < c4d5953582463f45e48b14ef9815e5fb636f7e1f, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < 9379f8527ca60d92715c90b32f1b477de9ec32cb, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < 0c3f4544ff3873594c8af1b907b4ac4e6d5ce005, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < c4f196bfeedd71e56aba4b63bd8f919edb2f7056, 1a1ca86158eee303af5270338695f90bc7ae02b3 ≤ v < 9393f1d656a79693e0c123ff7bc7c5c0f708046d, 2.6.27 | effd589568b2c4399894a23000286210c60af6d7, 702aa4a44c87026b97b1da5c5ca80e1fa8a9875a, fc71c6c3d3e3bb17474dcd1162aea6783a452a64, c4d5953582463f45e48b14ef9815e5fb636f7e1f, 9379f8527ca60d92715c90b32f1b477de9ec32cb, 0c3f4544ff3873594c8af1b907b4ac4e6d5ce005, c4f196bfeedd71e56aba4b63bd8f919edb2f7056, 9393f1d656a79693e0c123ff7bc7c5c0f708046d |
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.