Критична вразливість у Wasmtime, runtime для WebAssembly-додатків

У коригувальних оновленнях Wasmtime 6.0.1, 5.0.1 та 4.0.1 усунуто вразливість (CVE-2023-26489), якій надано критичний рівень небезпеки. Вразливість дозволяє організувати запис даних в область пам'яті поза межею, допустимою для ізольованого WebAssembly-коду, що потенційно може бути використане атакуючим для організації виконання свого коду поза ізольованим оточенням WASI.

Wasmtime є runtime виконання WebAssembly-додатків з розширеннями WASI (WebAssembly System Interface) як звичайних відокремлених додатків. Інструментарій написаний мовою Rust, а вразливість викликана логічною помилкою при визначенні правил лінійної адресації пам'яті в генераторі коду Cranelift, що транслює незалежне від апаратних архітектур проміжне подання у машинний код для архітектури x86_64.

Зокрема, для WebAssembly-додатків розраховувалися 35-розрядні ефективні адреси замість дозволених у WebAssembly 33-розрядних адрес, що зрушувало кордон допустимої для операцій читання та запису віртуальної пам'яті до 34 ГБ, тоді як налаштування sandbox-оточення надають захист від базової адреси. У результаті діапазон віртуальної пам'яті від 6 до 6 ГБ від базової адреси виявлявся доступним для читання і запису з WebAssembly-додатків. У цій пам'яті можуть розміщуватися інші оточення WebAssembly або компоненти WebAssembly runtime.

При неможливості оновити версію Wasmtime як обхідні шляхи для блокування помилки згадується вказівка ​​опції «Config::static_memory_maximum_size(0)» для включення обов'язкової окремої перевірки кордонів при будь-якому доступі до лінійної пам'яті (приводить до істотного зниження продуктивності). Іншим варіантом є використання налаштувань «Config::static_memory_guard_size(1 < 36)» для збільшення числа з сторожових сторінок пам'яті (Guard Page, при зверненні генерується виключення), що розміщуються в проблемному діапазоні віртуальної пам'яті (приводить до резервування великого обсягу віртуальної пам'яті та обмеження числа одночасно виконуваних WebAssembly-додатків).

Джерело: opennet.ru

Додати коментар або відгук