Крытычная ўразлівасць у 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

Дадаць каментар