Kerentanan kritis di Wasmtime, runtime untuk aplikasi WebAssembly

Pembaruan korektif Wasmtime 6.0.1, 5.0.1 dan 4.0.1 memperbaiki kerentanan (CVE-2023-26489), yang ditetapkan pada tingkat bahaya kritis. Kerentanan ini memungkinkan data ditulis ke area memori di luar batas yang diizinkan untuk kode WebAssembly yang terisolasi, yang berpotensi digunakan oleh penyerang untuk mengeksekusi kodenya di luar lingkungan WASI yang terisolasi.

Wasmtime adalah runtime untuk menjalankan aplikasi WebAssembly dengan ekstensi WASI (WebAssembly System Interface) sebagai aplikasi biasa yang berdiri sendiri. Toolkit ini ditulis dalam bahasa Rust, dan kerentanannya disebabkan oleh kesalahan logis dalam menentukan aturan pengalamatan memori linier dalam generator kode Cranelift, yang menerjemahkan representasi perantara yang tidak bergantung pada arsitektur perangkat keras menjadi kode mesin yang dapat dieksekusi untuk arsitektur x86_64.

Khususnya, untuk aplikasi WebAssembly, alamat efektif 35-bit dihitung alih-alih alamat 33-bit yang diizinkan di WebAssembly, yang menggeser batas memori virtual yang diizinkan untuk operasi baca dan tulis menjadi 34 GB, sementara pengaturan lingkungan kotak pasir memberikan perlindungan untuk 6 GB dari alamat dasar. Hasilnya, memori virtual berkisar antara 6 hingga 34 GB dari alamat dasar tersedia untuk membaca dan menulis dari aplikasi WebAssembly. Memori ini dapat menghosting lingkungan WebAssembly atau komponen runtime WebAssembly lainnya.

Jika tidak memungkinkan untuk memperbarui versi Wasmtime, solusi untuk memblokir kesalahan adalah dengan menentukan opsi "Config::static_memory_maximum_size(0)" untuk mengaktifkan pemeriksaan batas terpisah pada semua akses memori linier (mengakibatkan penalti kinerja yang signifikan) . Opsi lainnya adalah menggunakan pengaturan β€œConfig::static_memory_guard_size(1 < 36)” untuk menambah jumlah Halaman Penjaga (pengecualian yang muncul saat diakses) yang ditempatkan di rentang memori virtual yang bermasalah (mengakibatkan cadangan memori virtual dalam jumlah besar dan membatasi jumlah aplikasi WebAssembly yang berjalan secara bersamaan).

Sumber: opennet.ru

Tambah komentar