CVE-2026-12631
Təsvir
Zephyr nüvəsi `include/zephyr/kernel.h` faylında `__syscall` olaraq təyin edilmiş `k_thread_join()` və `k_thread_abort()` sistem çağırışlarını `kernel/thread.c` daxilindəki `thread_obj_validate()` vasitəsilə yoxlayır. Onun standart `switch` budağı, `k_object_validate()` funksiyası `-EPERM` (çağırıcı istifadəçi axınına hədəf axın obyektinə giriş icazəsi verilməyib) və ya `-EBADF` (təqdim edilən göstərici düzgün tipdə qeydiyyatdan keçmiş nüvə obyekti deyil) qaytardıqda işləyən "giriş rədd edildi" yoludur. Həmin budaq `K_OOPS(K_SYSCALL_VERIFY_MSG(ret, "access denied"))` funksiyasını çağırmışdır, lakin `K_SYSCALL_VERIFY_MSG` doğru ifadəni uğur kimi qəbul edir; buna görə də sıfırdan fərqli olan `ret` xəta kodu "doğrulandı (OK)" kimi oxunmuşdur, nüvə oops-u heç vaxt baş verməmişdir və idarəetmə `CODE_UNREACHABLE` hissəsinə keçmişdir. `k_thread_join()` və `k_thread_abort()` sistem çağırışları olduğu üçün, imtiyazsız istifadəçi rejimi axını (`CONFIG_USERSPACE` altında), ona məxsus olmayan axın obyekti üzərində bu çağırışlardan birini etməklə birbaşa bu rəddetmə yoluna çata bilər. Səhv törətmiş axının təmiz şəkildə dayandırılması əvəzinə, icra sistemi çağırışı idarəedicisi daxilində supervayzer rejimində çalışarkən `__builtin_unreachable()` funksiyasına çatır. Clang versiyalarında `CODE_UNREACHABLE` qeyri-qanuni təlimat (illegal-instruction) tələsi yaradır, beləliklə, istifadəçi axını nüvəni deterministik şəkildə çökdürə bilər — bu, istifadəçi sahəsi qumcuğunu (sandbox) aşan və lokal olaraq tetiklenebilen xidmətdən imtina (DoS) halıdır. GCC versiyalarında isə bu yol təyin olunmamış davranışdır (undefined behavior): kompilyator `thread_obj_validate()` üçün geri dönüş dəyəri emalını silə bilər, buna görə də o, təyin olunmamış bool qaytara bilər; əgər bu yanlışdırsa, çağırıcı istifadəçinin giriş icazəsi olmadığı axın üçün real `k_thread_join()`/`k_thread_abort()` implementasiyasına keçid edir ki, bu da giriş kontrolünün yan keçməsidir. Düzəliş yoxlama ifadəsini `ret == 0` ilə əvəz edir, beləliklə, rədd edilmiş (sıfırdan fərqli) nəticə artıq düzgün şəkildə `K_OOPS` yaradır və səhv törətmiş çağırıcını dayandırır.
Necə düzəltmək olar
- zephyrproject zephyr4.4.2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| zephyrproject zephyr | 2.3.0 ≤ v < 4.4.2 | 4.4.2 |
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.