Уязвимости Wasmtime открыли путь из песочницы WebAssembly

Две критические уязвимости в Wasmtime могли позволить вредоносному модулю WebAssembly выйти за пределы песочницы. Обе обнаружены в Cranelift — компиляторе, который по умолчанию преобразует Wasm в машинный код. Bytecode Alliance оценила каждую проблему в 9,9 балла из 10 по шкале CVSS; бюллетени опубликованы 19 октября 2026 года. CVE-2026-115889 затрагивает все процессорные архитектуры, а CVE-2026-115893 — только ARM64, также называемую aarch64. Сообщений об атаках с использованием этих ошибок сопровождающие Wasmtime пока не публиковали. На 26 октября 2026 года уязвимостей не было и в каталоге известных эксплуатируемых уязвимостей CISA — Агентства кибербезопасности и безопасности инфраструктуры США.
Уязвимости Wasmtime открыли путь из песочницы WebAssembly
Изображение носит иллюстративный характер

Песочница Wasmtime должна ограничивать модуль собственной памятью, предоставленными ему функциями хост-системы и проверенными адресами кода, куда разрешено передавать управление. В бюллетенях не указано, какие именно сервисы пострадают и к каким данным или ресурсам злоумышленник сможет получить доступ после выхода из изоляции. Риск выше всего у систем, которые компилируют модули, присланные посторонними. Fastly сообщала, что её платформа Compute запускает пользовательский код с помощью Wasmtime.
CVE-2026-115889 связана с учётом значений внутри функции. Cranelift присваивает значениям номера, а до Wasmtime 43 записывал их в 24-битные поля. В сборках для выпуска слишком большое число могло переполнить поле без ошибки. После этого компилятор мог обратиться не к тому значению и создать некорректный машинный код. Согласно бюллетеню, такую ситуацию можно было вызвать очень большой функцией Wasm или специально подготовленной функцией с множеством значений; результатом могла стать путаница типов и выход из песочницы.
В основной ветке разработки проблему устранили раньше публикации предупреждения. 18 февраля изменение, расширившее поля до 32 бит, включили в разработку; 20 марта оно вошло в Wasmtime 43.0.0. В описании изменения говорилось о компиляции более крупных функций, но не об угрозе безопасности. Ветку долгосрочной поддержки 36.x исправили 19 октября. Бюллетень не сообщает, когда разработчики поняли, что ошибка имеет последствия для безопасности.
CVE-2026-115893 касается инструкции Wasm br_table, которая выбирает одну из нескольких точек кода по индексу. Если индекс выходит за границы таблицы, программа должна перейти к цели по умолчанию. На ARM64 Cranelift использовал для этого переход, способный достичь примерно одного мегабайта. Таблица с более чем примерно 256 000 целей могла оказаться слишком большой: переход начинал указывать не туда. В бюллетене сказано, что при настройках Wasmtime по умолчанию «пользовательский модуль Wasm может заставить движок перейти к произвольному коду». Ошибка присутствовала с 2020 года, когда Wasmtime впервые получил поддержку ARM64. Исправление направляет переход за границы таблицы через саму таблицу переходов; кроме того, новые версии отказываются компилировать br_table более чем с 65 520 целями.
Уязвимые версии и обновления различаются по веткам. До 36.0.19, включая 24.x, были уязвимы к обеим проблемам; исправление для этой ветки — 36.0.19. Версии 37.0.0–42.x также затронуты обеими ошибками, а 43.0.0–47.x — только ARM64-уязвимостью. Для этих веток рекомендуются 48.0.7, 49.0.4 или 50.0.0. В линейке 48 версии 48.0.0–48.0.6 уязвимы к CVE-2026-115893, исправление — 48.0.7. В линейке 49 версии 49.0.0–49.0.3 затронуты той же ошибкой, исправление — 49.0.4. Версия 36.0.19 устраняет обе проблемы; 48.0.7, 49.0.4 и 50.0.0 также исправляют ARM64-ошибку, тогда как CVE-2026-115889 в этих ветках уже не затрагивала версии начиная с 43.0.0. Wasmtime 50.0.0 вышла 20 октября 2026 года и содержит оба исправления.
Wasmtime выпускает версии долгосрочной поддержки, номера которых кратны 12; срок поддержки каждой составляет два года. Остальные ветки поддерживаются два месяца, а исправления безопасности гарантированы только для поддерживаемых выпусков. На момент публикации оставались поддерживаемыми ветки 36, 48, 49 и 50. Ветка 24.x, несмотря на статус LTS, завершила поддержку 20 августа 2026 года; остальные неподдерживаемые ветки также не получили исправлений. ARM64-системы, обновившиеся в апреле до 36.0.7, 42.0.2 или 43.0.1 из-за предыдущего выхода из песочницы в Cranelift, всё ещё уязвимы к CVE-2026-115893.
Обновить нужно не только отдельную утилиту командной строки. Wasmtime можно встраивать в программы как библиотеку, поэтому каждое такое приложение необходимо пересобрать с исправленной версией. Для неподдерживаемых веток потребуется перейти на актуальный исправленный выпуск. В бюллетенях обходного решения нет; пока хост не обновлён, опасность представляет любой модуль, который может передать внешний пользователь.
Обе ошибки внесены в RustSec — базу, по которой инструмент cargo-audit проверяет файлы Cargo.lock. Идентификатор CVE-2026-115889 в RustSec — RUSTSEC-2026-0380, а CVE-2026-115893 — RUSTSEC-2026-0379. На 26 октября 2026 года в базе GitHub уже была проверенная запись о первой уязвимости, но не о второй. GitHub отправляет предупреждения Dependabot только по проверенным записям, поэтому пользователям Dependabot не следовало рассчитывать на уведомление об ошибке ARM64. Открытый инструмент Spin для создания бессерверных приложений на WebAssembly, работающий поверх Wasmtime, перешёл на Wasmtime 50.0.0 в выпуске Spin 4.2.4 от 21 октября 2026 года.


Новое на сайте

Ссылка