Wasmtime — это автономная JIT-среда выполнения для WebAssembly, использующая Cranelift. Существует уязвимость использования после освобожде…
Wasmtime — это автономная JIT-среда выполнения для WebAssembly, использующая Cranelift. Существует уязвимость использования после освобождения в Wasmtime при одновременном запуске Wasm, использующего externrefs, и включении прерывания эпохи в Wasmtime. Если вы явно не включаете прерывание эпохи (оно отключено по умолчанию), то вы не подвержены уязвимости. Если вы явно отключаете предложение типов ссылок Wasm (оно включено по умолчанию), то вы также не подвержены уязвимости. Использование после освобождения вызвано тем, что Cranelift не может генерировать карты стека, когда внутри холодных блоков есть точки безопасности. Холодные блоки возникают при включенном прерывании эпохи. Холодные блоки излучаются в конце скомпилированных функций и изменяют порядок излучения блоков по сравнению с определенным. Эта переупорядочение случайно заставило Cranelift пропустить излучение некоторых карт стека, потому что он ожидал излучать карты стека в порядке определения блоков, а не в порядке излучения блоков. Когда Wasmtime в конечном итоге собирал мусор, он не мог найти живые ссылки в стеке из-за отсутствующих карт стека, думал, что это неиспользуемый мусор, и поэтому возвращал их. Затем после окончания сбора код Wasm мог использовать возвращенные слишком рано ссылки, что является использованием после освобождения. Исправления были выпущены в версиях 0.34.2 и 0.35.2, которые устраняют уязвимость. Всем пользователям Wasmtime рекомендуется обновиться до этих исправленных версий. Если обновление в данный момент невозможно, вы можете избежать уязвимости, либо: отключив предложение типов ссылок Wasm, config.wasm_reference_types(false); либо отключив прерывание эпохи, если вы ранее его включали. config.epoch_interruption(false).
Продукт повторно использует или ссылается на память после её освобождения. В какой-то момент эта память может быть выделена повторно и сохранена в другом указателе, тогда как исходный указатель на освобождённую память используется вновь. Поскольку теперь по этому адресу может храниться посторонний объект, исходное использование указателя может привести к повреждению памяти или иным непреднамеренным последствиям. Если новая структура данных содержит указатель на функцию, то при исполнении может быть вызван код, контролируемый злоумышленником.
https://cwe.mitre.org/data/definitions/416.html →Открыть в коллекции CWE →| Продукт | Вендор | Статус |
|---|---|---|
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| firefox | Отслеживается | |
| mozjs38 | Отслеживается | |
| mozjs52 | Отслеживается | |
| mozjs52 | Отслеживается | |
| mozjs68 | Отслеживается | |
| mozjs78 | Отслеживается | |
| mozjs78 | Отслеживается | |
| mozjs78 | Отслеживается | |
| mozjs78 | Отслеживается | |
| mozjs91 | Отслеживается | |
| rust-wasmtime | Отслеживается |