CVE-2026-89596
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: forcedeth: PCI olmayan konfiqurasiya sahəsi yaddaşa verilərkən və bərpa edilərkən baş verən "off-by-one" xətası düzəldildi nv_suspend() və nv_resume() funksiyaları PCI olmayan konfiqurasiya sahəsini aşağıdakı dövr vasitəsilə gəzir: for (i = 0; i <= np->register_size/sizeof(u32); i++) Bu, bir dəfə artıq iterasiyanın icrasına səbəb olur. saved_config_space belə təyin edilmişdir: u32 saved_config_space[NV_PCI_REGSZ_MAX/4]; Və NV_PCI_REGSZ_VER3, NV_PCI_REGSZ_MAX (0x604) dəyərinə bərabərdir, buna görə də VER3 cihazında register_size/sizeof(u32) tam olaraq massivin uzunluğuna bərabərdir və sonuncu iterasiya massivinin sonundan bir element sonrakı ünvanı hədəfləyir. Hədəf alınan element np->name_rx[0..3]-dür: saved_config_space[]-dən dərhal sonra char name_rx[IFNAMSIZ + 3] gəlir və char tipi üçün padding tələb olunmur. Bununla heç bir görünən məlumat korlanmır, çünki nv_request_irq() funksiyası name_rx-i request_irq()-ə ötürməzdən əvvəl sprintf() ilə yenidən yazır. Xəta, özlüyündə sərhədləri aşan girişdir (out-of-bounds access), hansı ki, UBSAN tərəfindən hesabatlaşdırılır və CONFIG_UBSAN_TRAP=y olduqda işləyən nüvə kodunu dayandıran bir "trap"-ə çevrilir. Bundan əlavə, MMIO oxuma əməliyyatı və bərpa zamanı drayverin xəritələdiyi diapazonun bir dword sonrasında olan base + 0x604 ünvanına MMIO writel() əməliyyatı baş verir: np->base = ioremap(addr, np->register_size); VER1 və VER2 cihazları massiv daxilində qalır, lakin onlar da öz pəncərələrindən bir dword sonrakı sahəyə aid yanlış oxuma və yazma əməliyyatlarına məruz qalırlar. Problem Apple Macmini3,1 (MCP79) cihazında dərin S3 dövrü zamanı UBSAN tərəfindən aşkar edilmişdir. Aşağıdakı xəta çıxarışı (splat) qısaldılmışdır: fayl adındakı qurulma yolu, CPU və taint sətirləri, Workqueue sətiri, "?" ipucu kadrları və device_suspend-dən sonrakı kadrlar kəsilmişdir. Nüvə, ağacdan kənar (out-of-tree) nouveau və CPU_OUT_OF_SPEC ilə "tainted" olmuşdu; forcedeth isə standart modul idi. 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 ... Hər iki dövr işə düşür. UBSAN hər bir mənbə yerini modul yükləndikdə yalnız bir dəfə hesabatlaşdırır (__ubsan_handle_out_of_bounds() funksiyası suppress_report()-i çağırır, o isə struct source_location üzərində test_and_set_bit(REPORTED_BIT, ...) icra edir), buna görə də iki xəta çıxarışı modul yükləndikdən sonra ilk S3 dövründə baş verir və sonrakı dövrlərdə giriş hər dəfə sərhədi aşsa da, heç bir bildiriş gəlmir. Həmin birinci dövrdə 6225-ci sətir pci_pm_suspend-dən, 6240-cı sətir isə pci_pm_resume-dən hesabatlaşdırılır. Eyni "off-by-one" xətası 2012-ci ildə ba9aa134287f ("forcedeth: fix buffer overflow") commit-i ilə nv_get_regs() funksiyasında düzəldilmişdi; bu iki dövr isə nəzərdən qaçmışdı. Suspend və resume hissəsi 2013-cü ilin sentyabrında Marc Weber tərəfindən eyni analiz və eyni bir simvolluq düzəlişlə LKML-də bildirilmişdi, lakin yamama (patch) mətn daxilində göndərilmək əvəzinə qoşma kimi əlavə edilmişdi və müzakirə orada sona çatmışdı. Dəqiq register_size baytını yaddaşa vermək və bərpa etmək üçün <= əvəzinə < istifadə edin.
Necə düzəltmək olar
- Linux Linuxeffd589568b2c4399894a23000286210c60af6d7, 702aa4a44c87026b97b1da5c5ca80e1fa8a9875a, fc71c6c3d3e3bb17474dcd1162aea6783a452a64, c4d5953582463f45e48b14ef9815e5fb636f7e1f, 9379f8527ca60d92715c90b32f1b477de9ec32cb, 0c3f4544ff3873594c8af1b907b4ac4e6d5ce005, c4f196bfeedd71e56aba4b63bd8f919edb2f7056, 9393f1d656a79693e0c123ff7bc7c5c0f708046d və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| 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 |
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.