CVE-2024-35873
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: riscv: rt_sigreturn()-də vektor vəziyyətinin bərpası düzəldildi RISC-V Vector spesifikasiyasının "Appendix D: Calling Convention for Vector State" [1] bölməsində bildirilir ki, "Sistem çağırışının icrası bütün çağıran tərəfdən yadda saxlanılan vektor registrlərinin (v0-v31, vl, vtype) və vstart-ın təyin olunmamış hala gəlməsinə səbəb olur". RISC-V kernel-də bu, "vstate-in atılması" (discarding the vstate) adlanır. rt_sigreturn() sistem çağırışı vasitəsilə siqnal idarəedicisindən geri dönərkən də vektorların atılması həyata keçirilir. Lakin, vektor vəziyyəti sigcontext-dən bərpa edilməli olduğu üçün bu problem yaratmır və vektorların atılmasına əhəmiyyət verilmir. "Live state" işləyən kontekstdəki aktual vektor registridir, "vstate" isə tapşırığın vektor vəziyyətidir. Çirkli (dirty) live state, vstate və live state-in sinxron olmadığını bildirir. Vektorlaşdırılmış user_from_copy() tətbiq edildikdə, live state-in atılması ilə bağlı bərpa kodunda bir xəta meydana gəlmişdir. Bunun yanlış işlədiyini göstərən nümunə: 1. İstifadəçi tətbiqi vektor kodunu icra edir. 2. Tətbiq siqnal alır və siqnal idarəedicisinə daxil olur. 3. Tətbiq rt_sigreturn() sistem çağırışından istifadə edərək siqnal idarəedicisindən geri dönür. 4. rt_sigreturn()-ə daxil olduqda canlı vektor vəziyyəti (live vector state) atılır və live state "çirkli" (dirty) kimi qeyd edilir; bu, live state-in cari vstate ilə sinxronlaşdırılmalı olduğunu göstərir. 5. rt_sigreturn() Vektor registrləri istisna olmaqla, digər vstate məlumatlarını sigcontext-dən bərpa edir. 6. rt_sigreturn() Vektor registrlərini sigcontext-dən bərpa edir və burada vektorlaşdırılmış user_from_copy() istifadə olunur. Atma nəticəsində yaranan çirkli live state vstate-ə yazılır və bu, vstate-i korlayır. 7. rt_sigreturn() tətbiqə geri dönür və tətbiq korlanmış vstate səbəbindən çökməyə məruz qalır. Qeyd edək ki, vektorlaşdırılmış user_from_copy() funksiyasının çağırılması CONFIG_RISCV_ISA_V_UCOPY_THRESHOLD dəyərindən asılıdır. Defolt dəyər 768-dir, bu isə həmin xətanın aktivləşməsi üçün vlen-in 128b-dən böyük olması mənasına gəlir. Həll yolu, vstate bərpası yerinə yetirilməzdən əvvəl live state-in çirkli olmayan/təmiz (non-dirty/clean) kimi qeyd edilməsidir.
Necə düzəltmək olar
- linux linux_kernel6.8.5 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.8 ≤ v < 6.8.5, 6.9 | 6.8.5 |
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.