CVE-2025-40040

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: mm/ksm: ksm_madvise funksiyasında bayraqların silinməsi davranışı düzəldildi syzkaller aşağıdakı çökməni aşkar etdi: (kernel BUG) [ 44.607039] ------------[ cut here ]------------ [ 44.607422] kernel BUG at mm/userfaultfd.c:2067! [ 44.608148] Oops: invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN NOPTI [ 44.608814] CPU: 1 UID: 0 PID: 2475 Comm: reproducer Not tainted 6.16.0-rc6 #1 PREEMPT(none) [ 44.609635] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014 [ 44.610695] RIP: 0010:userfaultfd_release_all+0x3a8/0x460 <digər registrlər kəsilib, etibarsız izlər çıxarılıb> [ 44.617726] Call Trace: [ 44.617926] <TASK> [ 44.619284] userfaultfd_release+0xef/0x1b0 [ 44.620976] __fput+0x3f9/0xb60 [ 44.621240] fput_close_sync+0x110/0x210 [ 44.622222] __x64_sys_close+0x8f/0x120 [ 44.622530] do_syscall_64+0x5b/0x2f0 [ 44.622840] entry_SYSCALL_64_after_hwframe+0x76/0x7e [ 44.623244] RIP: 0033:0x7f365bb3f227 Körnə (kernel) panic baş verir, çünki userfaultfd_release_all() zamanı UFFD uyğunsuzluğu aşkarlanır. Xüsusilə, vma->vm_userfaultfd_ctx üçün etibarlı göstəricisi olan, lakin vma->vm_flags daxilində UFFD bayraqları olmayan bir VMA mövcuddur. Uyğunsuzluğa ksm_madvise() səbəb olur: istifadəçi MINOR rejimində UFFD üçün qeydiyyatdan keçmiş VMA üzərində MADV_UNMEARGEABLE ilə madvise() çağırdıqda, təsadüfən vma->vm_flags-in yuxarı 32 bitində saxlanılan bütün bayraqlar silinir. x86_64 kernel build-inin olduğu fərz edilərsə, unsigned long 64-bit, unsigned int və int isə 32-bit genişliyindədir. Bu struktur &= ~VM_MERGEABLE mənimsətməsi zamanı aşağıdakı xətaya səbəb olur. VM_MERGEABLE unsigned int tipində 0x8000'0000 dəyərli 32-bitlik sabitdir. ~ operatoru tətbiq edildikdən sonra o, 0x7fff'ffff unsigned int dəyərinə çevrilir və daha sonra & əməliyyatından əvvəl unsigned long tipinə yüksəldilir. Unsigned konversiya etdiyimiz üçün bu yüksəltmə yuxarı 32 biti aparıcı sıfırlarla doldurur (hətta signed konversiya üçün də bu kömək etməzdi, çünki aparıcı bit 0-dır). Beləliklə, & əməliyyatı vm_flags-i nəzərdə tutulan 0xffff'ffff'7fff'ffff əvəzinə 0x0000'0000'7fff'ffff ilə AND edir və nəticədə onun dəyərinin yuxarı 32 bitini təsadüfən silir. Problem BIT() makrosundan istifadə etməklə `VM_MERGEABLE` sabitini unsigned long tipinə dəyişərək həll edilmişdir. Qeyd: digər VM_* bayraqlarına təsir etmir: bu yalnız VM_MERGEABLE bayrağında baş verir, çünki digər VM_* bayraqlarının hamısı int tipində sabitləridir və ~ əməliyyatından sonra onlar aparıcı 1 ilə bitirlər və beləliklə, aparıcı 1-lərlə unsigned long tipinə çevrilirlər. Qeyd 2: 31defc3b01d9 ("userfaultfd: remove (VM_)BUG_ON()s") commit-indən sonra bu artıq kernel BUG deyil, eyni yerdə WARNING-dir: [ 45.595973] WARNING: CPU: 1 PID: 2474 at mm/userfaultfd.c:2067 lakin kök səbəb (bayrağın silinməsi) eynidir.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc28 okt 2025
İlk görülmə28 okt 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel5.4.302, 5.10.247, 5.15.197, 6.1.158, 6.6.114, 6.12.55, 6.17.3 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel4.6 ≤ v < 5.4.302, 5.5 ≤ v < 5.10.247, 5.11 ≤ v < 5.15.197, 5.16 ≤ v < 6.1.158, 6.2 ≤ v < 6.6.114, 6.7 ≤ v < 6.12.55, 6.13 ≤ v < 6.17.35.4.302, 5.10.247, 5.15.197, 6.1.158, 6.6.114, 6.12.55, 6.17.3

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.

Intelligence 360 paketində

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.