بهروزرسانیهای اصلاحی Wasmtime 6.0.1، 5.0.1 و 4.0.1 آسیبپذیری (CVE-2023-26489) را برطرف کردند، که سطح بحرانی خطر تعیین شده بود. این آسیبپذیری اجازه میدهد تا دادهها در یک ناحیه حافظه خارج از مرزهای مجاز برای کد WebAssembly ایزوله نوشته شوند، که به طور بالقوه میتواند توسط مهاجم برای اجرای کد خود در خارج از محیط WASI ایزوله استفاده شود.
Wasmtime یک زمان اجرا برای اجرای برنامه های WebAssembly با پسوندهای WASI (WebAssembly System Interface) به عنوان برنامه های معمولی مستقل است. جعبه ابزار به زبان Rust نوشته شده است و آسیب پذیری ناشی از یک خطای منطقی در تعریف قوانین آدرس دهی حافظه خطی در مولد کد Cranelift است که یک نمایش متوسط مستقل از معماری های سخت افزاری را به کد ماشین اجرایی برای معماری x86_64 ترجمه می کند.
به طور خاص، برای برنامه های WebAssembly، آدرس های موثر 35 بیتی به جای آدرس های 33 بیتی مجاز در WebAssembly محاسبه شد، که محدودیت حافظه مجازی مجاز برای عملیات خواندن و نوشتن را به 34 گیگابایت تغییر داد، در حالی که تنظیمات محیط sandbox محافظت از 6 گیگابایت از آدرس پایه. در نتیجه، محدوده حافظه مجازی از 6 تا 34 گیگابایت از آدرس پایه برای خواندن و نوشتن از برنامه های WebAssembly در دسترس بود. این حافظه می تواند میزبان سایر محیط های WebAssembly یا اجزای زمان اجرا WebAssembly باشد.
اگر امکان بهروزرسانی نسخه Wasmtime وجود ندارد، راهحلی برای مسدود کردن خطا این است که گزینه «Config::static_memory_maximum_size(0)» را مشخص کنید تا بررسی کرانههای جداگانه در تمام دسترسیهای حافظه خطی فعال شود (که منجر به جریمه عملکرد قابل توجهی میشود). . گزینه دیگر استفاده از تنظیمات "Config::static_memory_guard_size(1 < 36)" برای افزایش تعداد صفحات محافظ (یک استثنا در هنگام دسترسی) قرار داده شده در محدوده حافظه مجازی مشکل ساز است (که منجر به ذخیره مقدار زیادی حافظه مجازی و محدود کردن تعداد برنامه های WebAssembly که همزمان اجرا می شوند).
منبع: opennet.ru