CVE-2024-35873

Orta

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.

CiddilikOrta
CVSS5.5
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc19 may 2024
İlk görülmə19 may 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.8.5 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.8 ≤ v < 6.8.5, 6.96.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.

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-2024-35873 · Linux Kernel · Dark Radar