CVE-2026-64142

Kritik

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: ksmbd: durable scavenger bağlama prosesi m_fp_list axtarışları ilə yarış vəziyyətinə (race condition) səbəb olur ksmbd_durable_scavenger() funksiyası, ksmbd_lookup_fd_inode() (ksmbd_vfs_rename tərəfindən istifadə olunur) və fs/smb/server/smb_common.c faylındakı paylaşım rejimi yoxlamaları daxil olmaqla, f_ci->m_fp_list siyahısını iterasiya edən hər hansı bir walker-ə qarşı iki əlaqəli yarış vəziyyətinə malikdir. (1) fp->node list-head yenidən istifadəsi. Sessiyanın ləğvindən sonra durable-preserve edilmiş handle-lar f_ci->m_fp_list üzərində bağlı qala bilər, beləliklə, handle yenidən qoşula bildiyi müddətcə paylaşım rejimi yoxlamaları onları görməyə davam edir. Scavenger, başlanğıc durable idr-dən çıxardıqdan sonra fp->node-u lokal scavenger_list-ə əlavə etməklə vaxtı keçmiş handle-ları toplayırdı. fp->node m_fp_list tərəfindən istifadə edilən eyni list_head olduğu üçün, list_add(&fp->node, &scavenger_list) çağırışı m_fp_list linklərini overwrite edir və hər iki siyahını korlayır. CONFIG_DEBUG_LIST bunu paylaşım rejimi gəzinti yolunda hesabatlaşdıra bilər. (2) m_fp_list walker-lərinə qarşı refcount yarış vəziyyəti. Scavenger, global_ft.lock altında atomic_read(&fp->refcount) > 1 və fp->conn şərtləri ilə vaxtı keçmiş durable handle-ı təyin edir, fp-ni global_ft-dən silir, sonra fp-ni m_fp_list-dən ayırmazdan və azad etməzdən əvvəl global_ft.lock kilidini buraxır. Bu boşluq ərzində fp hələ də f_state == FP_INITED vəziyyətində m_fp_list-ə bağlıdır. m_lock altında olan ksmbd_lookup_fd_inode() funksiyası ksmbd_fp_get() çağırır (hələ də 1 olan refcount üzərində atomic_inc_not_zero) və aktiv referans götürür; daha sonra scavenger, sahibinin referansa malik olduğu halda fp-ni ayırır və azad edir. Bu, sahibinin növbəti ksmbd_fd_put() çağırışında və ya ksmbd_fp_get() çağırmadan m_fp_list-i iterasiya edən paralel paylaşım rejimi walker-inin yerinə yetirdiyi hər hansı sahə oxumalarında UAF (Use-After-Free) xətasına səbəb olur (smb_check_perm_dleases kimi yollar). Hər ikisi düzəldildi: * fp->node-un scavenger-ə məxsus siyahı nodu kimi yenidən istifadəsinə son qoyuldu. global_ft.lock altında global_ft-dən bir vaxtı keçmiş handle silinir, aşkar müvəqqəti referans götürülür, kilid buraxılır, f_ci->m_lock altında fp->node m_fp_list-dən ayrılır, sonra atomic_sub_and_test(2, &fp->refcount) ilə həm durable ömür, həm də müvəqqəti referanslar buraxılır. Əgər scavenger sonuncu "putter"dirsə, bağlama prosesi orada icra olunur; əks halda, artıq m_fp_list axtarışından keçmiş cari sahib öz ksmbd_fd_put() yolu vasitəsilə yekun bağlama prosesinə sahib olur. Tək-tək utilizasiya, eyni dövrdə çox sayda handle-ın vaxtı bitdikdə durable idr-i yenidən skan edə bilər, lakin durable scavenging fon rejimində işləyən vaxt bitmə yoludur və yekun tam skan növbəti gözləmədən əvvəl min_timeout-u yenidən hesablayır. * __ksmbd_remove_durable_fd() daxilində idr_remove()-dan dərhal sonra fp->persistent_id təmizlənir, beləliklə, fp-ni əldə etmiş sahibdən gələn gecikmiş yekun bağlama prosesi, ksmbd_open_durable_fd()-dəki idr_alloc_cyclic() tərəfindən artıq tamamilə yeni bir durable handle-a verilmiş ola biləcək persistent id üzərində yenidən idr_remove() çağırmır. * fp hər hansı sessiya cədvəlindən ayrıldıqda (durable preserve zamanı session_fd_check() tərəfindən fp->conn təmizlənir — unpublish zamanı volatile_id təmizlənməsi ilə birlikdə, buna görə yalnız fp->conn-un yoxlanılması kifayətdir), __put_fd_put() funksiyasındakı hər bağlantıya aid open_files_count azalma prosesi bypass edilir. Yekun bağlama prosesinə sahib olan walker, bu durable fp-ni heç vaxt izləməyən əlaqəsiz bir work->conn-dan işləyir; bu qoruma olmadan sahib həmin əlaqəsiz sayğacı underflow edərdi. İki yarış vəziyyəti bir yamada birləşdirilib, çünki yalnız yamama (1) korlanmış siyahını təmizləyir, lakin m_fp_list walker-ləri üçün deterministik UAF pəncərəsi saxlayır ki, bu da (2)-dəki müvəqqəti referans və persistent_id intizamı ilə bağlanır; orta vəziyyətə bisekt etmək, yamadan əvvəlki xaosun sadəcə daha az təkrar olunan etdiyi bir UAF-a gətirib çıxarardı. Doğrulama: * list_head yenidən istifadə yolu üçün CONFIG_DEBUG_LIST əhatəsi. * KASAN aktiv edilmiş birbaşa SMB2 durable-handle əhatəsi; burada paralel rename axtarışları zamanı durable handle-ların vaxtı bitdiyi halda ksmbd_durable_scavenger() və NULL olmayan ksmbd_lookup_fd_inode() geri dönüşləri sınaqdan keçirilmişdir və heç bir KASAN, UAF, siyahı korlanması, ODEBUG və ya WARNING hesabatı alınmamışdır.

CiddilikKritik
CVSS9.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc19 iyl 2026
İlk görülmə19 iyl 2026

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.12.92, 6.18.34, 7.0.11 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.11 ≤ v < 6.12.92, 6.13 ≤ v < 6.18.34, 6.19 ≤ v < 7.0.11, 7.16.12.92, 6.18.34, 7.0.11

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.

CVE-2026-64142 · Linux Kernel · Dark Radar