Wasmtime — это среда выполнения WebAssembly. До версий 24.0.7, 36.0.7, 42.0.2 и 43.0.1 Wasmtime содержал уязвимость, из-за которой при перекодировании строки UTF-16 в кодировку компонентной модели latin1+utf16 неправильно проверялась длина входной строки в байтах при выполнении проверки границ. В частности, проверялось количество кодовых единиц, а не длина байта, которая в два раза превышает размер кодовых единиц.
Эта уязвимость может привести к тому, что хост будет читать за пределами линейной памяти WebAssembly в попытке перекодировать несуществующие байты. В конфигурации Wasmtime по умолчанию это будет читать неотображенную память на защитной странице, завершая процесс с ошибкой сегмента. Однако Wasmtime можно настроить без защитных страниц, что означает, что память хоста за пределами линейной памяти может читаться и интерпретироваться как UTF-16.
Сегфолт хоста — это уязвимость типа «отказ в обслуживании» в Wasmtime, и, возможно, возможность чтения за пределами линейной памяти также является уязвимостью. Обратите внимание, что чтение за пределами линейной памяти требует нестандартной конфигурации Wasmtime, в частности, с отключенными защитными страницами. Эта уязвимость исправлена в версиях 24.0.7, 36.0.7, 42.0.2 и 43.0.1.
Показать оригинальное описание (EN)
Wasmtime is a runtime for WebAssembly. Prior to 24.0.7, 36.0.7, 42.0.2, and 43.0.1, Wasmtime contains a vulnerability where when transcoding a UTF-16 string to the latin1+utf16 component-model encoding it would incorrectly validate the byte length of the input string when performing a bounds check. Specifically the number of code units were checked instead of the byte length, which is twice the size of the code units. This vulnerability can cause the host to read beyond the end of a WebAssembly's linear memory in an attempt to transcode nonexistent bytes. In Wasmtime's default configuration this will read unmapped memory on a guard page, terminating the process with a segfault. Wasmtime can be configured, however, without guard pages which would mean that host memory beyond the end of linear memory may be read and interpreted as UTF-16. A host segfault is a denial-of-service vulnerability in Wasmtime, and possibly being able to read beyond the end of linear memory is additionally a vulnerability. Note that reading beyond the end of linear memory requires nonstandard configuration of Wasmtime, specifically with guard pages disabled. This vulnerability is fixed in 24.0.7, 36.0.7, 42.0.2, and 43.0.1.
Характеристики атаки
Последствия
Строка CVSS v4.0