CVE-2026-35186

MEDIUM CVSS 4.0: 6,1 EPSS 0.05%
Обновлено 9 апреля 2026
Wasmtime
Параметр Значение
CVSS 6,1 (MEDIUM)
Уязвимые версии до 36.0.7
Устранено в версии 36.0.7
Тип уязвимости CWE-789
Поставщик Wasmtime
Публичный эксплойт Нет

Wasmtime — это среда выполнения WebAssembly. Начиная с версий 25.0.0 и до версий 36.0.7, 42.0.2 и 43.0.1, серверная часть компилятора Winch Wasmtime содержит ошибку, из-за которой перевод оператора table.grow приводит к неправильному типу результата. Для 32-битных таблиц это означает, что результат оператора внутри Winch помечается как 64-битное значение, а не как 32-битное значение.

Это недопустимое внутреннее представление состояния компилятора Winch приводит к дальнейшим проблемам в зависимости от того, как используется значение. Основным следствием этой ошибки является то, что байты в адресном пространстве хоста могут быть сохранены/прочитаны. Однако это применимо только к 16 байтам до линейной памяти, поскольку единственное значимое возвращаемое значение table.grow, которое может быть неправильно истолковано, — это -1.

Байты перед линейной памятью по умолчанию представляют собой неотображенную память. Однако Wasmtime обнаружит эту ошибку и прервет процесс, поскольку Wasm не должен иметь доступа к этим байтам. В целом эта ошибка в Winch представляет собой вектор DoS, вызывающий сбой хост-процесса, проблему корректности в Winch и возможную утечку до 16 байт перед линейной памятью.

Компилятором Wasmtime по умолчанию является Cranelift, а не Winch, а настройки Wasmtime по умолчанию предусматривают размещение защитных страниц перед линейной памятью. Это означает, что эта проблема не влияет на конфигурацию Wasmtime по умолчанию, и при явном выборе Winch конфигурация Wasmtime по умолчанию приводит к DoS. Отключение защитных страниц до того, как потребуется линейная память, может привести к утечке до 16 байт данных хоста.

Эта уязвимость исправлена ​​в версиях 36.0.7, 42.0.2 и 43.0.1.

Показать оригинальное описание (EN)

Wasmtime is a runtime for WebAssembly. From 25.0.0 to before 36.0.7, 42.0.2, and 43.0.1, Wasmtime's Winch compiler backend contains a bug where translating the table.grow operator causes the result to be incorrectly typed. For 32-bit tables this means that the result of the operator, internally in Winch, is tagged as a 64-bit value instead of a 32-bit value. This invalid internal representation of Winch's compiler state compounds into further issues depending on how the value is consumed. The primary consequence of this bug is that bytes in the host's address space can be stored/read from. This is only applicable to the 16 bytes before linear memory, however, as the only significant return value of table.grow that can be misinterpreted is -1. The bytes before linear memory are, by default, unmapped memory. Wasmtime will detect this fault and abort the process, however, because wasm should not be able to access these bytes. Overall this this bug in Winch represents a DoS vector by crashing the host process, a correctness issue within Winch, and a possible leak of up to 16-bytes before linear memory. Wasmtime's default compiler is Cranelift, not Winch, and Wasmtime's default settings are to place guard pages before linear memory. This means that Wasmtime's default configuration is not affected by this issue, and when explicitly choosing Winch Wasmtime's otherwise default configuration leads to a DoS. Disabling guard pages before linear memory is required to possibly leak up to 16-bytes of host data. This vulnerability is fixed in 36.0.7, 42.0.2, and 43.0.1.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Высокая
Сложно эксплуатировать
Условия для атаки
Требуются
Нужны дополнительные условия
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Низкое
Частичная утечка данных
Целостность
Низкое
Частичная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v4.0

Тип уязвимости (CWE)