CVE-2024-47813

Aşağı

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.

CiddilikAşağı
CVSS2.9
İstismar ehtimalı—
MəhsulBytecodealliance Wasmtime
Dərc9 okt 2024
İlk görülmə9 okt 2024
Zəiflik növüCWE-367CWE-367

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əhsulTəsirlənən versiyalarDüzəldildiyi versiya
bytecodealliance wasmtime19.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—
wasmtimePyPIv ≤ 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.

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-47813 · Bytecodealliance Wasmtime · Dark Radar