CVE-2024-47813
Təsvir
Wasmtime, WebAssembly üçün açıq mənbəli bir runtime-dır. Müəyyən paralel hadisələrin ardıcıllığı zamanı, yarış vəziyyəti (race condition) səbəbindən `wasmtime::Engine`-in daxili tip reyestri ikiqat qeydiyyatdan çıxarma (double-unregistration) xətalarına meyilli idi ki, bu da paniklərə və potensial olaraq tip reyestrinin korlanmasına səbəb olurdu. Reyestrin bu cür korlanması, əlavə və xüsusi paralel hadisələr ardıcıllığından sonra, WebAssembly-nin idarəetmə axınının bütövlüyünün (CFI) və tip təhlükəsizliyinin pozulmasına gətirib çıxara bilərdi. `wasmtime::Engine`-dən çox sayda thread-də istifadə etməyən istifadəçilər bundan təsirlənmir. Zamanla thread-lər arasında yalnız yeni modullar yaradan istifadəçilər də əlavə olaraq təsirlənmir. Bu xətanın təkrar istehsal edilməsi üçün bütün tiplərin eyni `wasmtime::Engine` ilə əlaqəli olduğu çox sayda thread-də eyni vaxtda çoxlu tip nümunələrinin (məsələn, `wasmtime::FuncType` və ya `wasmtime::ArrayType`) yaradılması və silinməsi tələb olunur. **Wasm qonaqları bu xətanı tetikleyə bilməzlər.** Təsirə məruz qalan Wasmtime tipləri ilə bağlı API-ların siyahısı üçün aşağıdakı "References" bölməsinə baxın. Wasmtime, `wasmtime::Engine` daxilində tiplərin daxili reyestrini saxlayır və mühərrik thread-lər arasında paylaşıla bilir. Tiplər `wasmtime::Module` yaradılması, `wasmtime::FuncType` yaradılması və ya host-un funksiya yaratdığı digər bir sıra API-lar vasitəsilə yaradıla və istinad edilə bilər (aşağıdakı "References" hissəsinə baxın). Bu hallar, məsələn, WebAssembly-nin `call_indirect` funksiyasında tip yoxlamalarını həyata keçirmək üçün istifadə olunan tip indekslərini idarə etmək və tip məlumatlarını dublikatlardan təmizləmək üçün mühərriklə qarşılıqlı əlaqədə olur. Bu xəta, daxili tip reyestrinin assert-i tetikləyəcəyi və ya etibarsız vəziyyətə malik olacağı şəkildə korlana bildiyi bu idarəetmədəki yarış vəziyyətidir. Wasmtime-ın tipin daxili təmsili, fərdi tiplərin (məsələn, hər host-funksiya üçün biri) neçə dəfə istifadə edildiyinə dair qeydiyyat sayını saxlamasını təmin edir. Tiplər əlavə olaraq, mühərrik daxilində oxuma-yazma kilidi (read-write lock) arxasında axtarış/dublikatların təmizlənməsi kimi vəziyyətlərə malikdir. Buradakı yarış vəziyyəti, yoxlama zamanı ilə istifadə zamanı arasındakı (TOCTOU) xətadır: bir thread atomik şəkildə tip girişinin qeydiyyat sayını azaldır, sıfır qeydiyyat olduğunu müşahidə edir və sonra həmin girişi qeydiyyatdan çıxarmaq üçün kilidi əldə edir. Lakin, birinci thread sıfır qeydiyyat sayını müşahidə etdikdən və kilidi əldə etmədən əvvəl, başqa bir thread aşağıdakı hadisələr ardıcıllığını yerinə yetirə bilər: tipin başqa bir nüsxəsini yenidən qeydiyyatdan keçirir, hansı ki, o, eyni girişlə dublikatlaşaraq onu bərpa edir və qeydiyyat sayını artırır; sonra tipi silir və onun qeydiyyat sayını azaldır; qeydiyyat sayının artıq sıfır olduğunu müşahidə edir; tip reyestri kilidini əldə edir və nəhayət, tipi qeydiyyatdan çıxarır. İndi, orijinal thread nəhayət kilidi əldə edib girişi qeydiyyatdan çıxardıqda, bu, həmin girişin ikinci dəfə qeydiyyatdan çıxarılması olur. Bu xəta ilk dəfə Wasmtime 19-un WebAssembly GC təklifinin hazırlanması zamanı ortaya çıxmışdı. Bununla belə, bu xəta GC təklifindən istifadə etməyən istifadəçilərə də təsir edir və GC təklifi söndürüldükdə belə Wasmtime-ın standart konfiqurasiyasında mövcuddur. 19.0.0 və daha sonrakı versiyalardan istifadə edən bütün Wasmtime istifadəçiləri bu problemdən təsirlənirlər. Biz bu xətanın düzəlişini ehtiva edən aşağıdakı Wasmtime versiyalarını buraxmışıq: * 21.0.2 * 22.0.1 * 23.0.3 * 24.0.1 * 25.0.2. Əgər tətbiqiniz çox sayda thread-də eyni vaxtda Wasmtime tipləri yaradır və silirsə, məlum olan heç bir alternativ həll yolu yoxdur. İstifadəçilərə yamalanmış versiyaya keçid etmək tövsiyə olunur.
Necə düzəltmək olar
Mənbələrdə bu zəiflik üçün düzəldilmiş versiya və ya yamaq keçidi yoxdur.
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| bytecodealliance wasmtime | 19.0.0, 19.0.1, 19.0.2, 20.0.0, 20.0.1, 20.0.2, 21.0.0, 21.0.1, 22.0.0, 23.0.0, 23.0.1, 23.0.2, 24.0.0, 25.0.0, 25.0.1 | — |
| wasmtimePyPI | v ≤ 19.0.0 | — |
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.