Две критические уязвимости Wasmtime позволяют вредоносным Wasm-модулям вырваться из песочницы
Разработчики Wasmtime — среды выполнения WebAssembly, которую встраивают в другое программное обеспечение, — предупредили о двух критических уязвимостях. Вредоносный Wasm-модуль с их помощью может вырваться за пределы песочницы, которая должна удерживать его в заданных рамках: разрешать доступ только к собственной памяти, предоставленным хост-функциям и переходы лишь в проверенные точки кода.
Обе ошибки находятся в Cranelift — компиляторе, который Wasmtime по умолчанию использует для превращения WebAssembly в машинный код. Сопровождающие из Bytecode Alliance оценили каждую в 9,9 балла из 10 по шкале CVSS. Исправленные версии вышли 19 и 20 октября; об атаках пока не сообщалось.
Условия эксплуатации
Для атаки нужен уязвимый сборочный вариант Wasmtime, через который компилируется подконтрольный злоумышленнику модуль. Поэтому в зоне наибольшего риска — сервисы, исполняющие чужой код. В качестве примера упоминается платформа Fastly Compute, запускающая код клиентов на Wasmtime. В бюллетенях не названы затронутые сервисы и не уточняется, к чему именно получит доступ атакующий после побега из песочницы.
CVE-2026-115889 затрагивает все архитектуры процессоров, CVE-2026-115893 — только ARM64 (aarch64). По состоянию на 26 октября ни одна из уязвимостей не числилась в каталоге известных эксплуатируемых уязвимостей CISA.
Как они устроены
Первая ошибка связана с тем, что до версии 43 Cranelift упаковывал внутренние номера значений в 24-битные поля. В релизных сборках слишком большое число переполняло поле без ошибки, и компилятор начинал ссылаться не на то значение. Достаточно крупная или специально сконструированная функция могла вызвать путаницу типов и побег из песочницы. Исправление, расширившее поля до 32 бит, попало в основную ветку ещё 18 февраля и вышло в версии 43.0.0 — но подавалось как возможность компилировать функции побольше, без упоминания безопасности.
Вторая ошибка касается инструкции br_table, выполняющей переход по индексу. На ARM64 выход за границы таблицы отправлялся к цели по умолчанию переходом с дальностью около 1 МиБ. Таблица более чем на ~256 000 целей оказывалась слишком большой, и переход молча указывал не туда — позволяя заставить движок прыгнуть на произвольный код. Ошибка присутствовала с момента появления поддержки ARM64 в 2020 году. Исправленные версии также отказываются компилировать br_table более чем с 65 520 целями.
Что делать
Следует обновиться до исправленного релиза своей линейки — 36.0.19, 48.0.7 или 49.0.4; версия 50.0.0 от 20 октября закрывает обе ошибки. Поддерживаются только линейки 36, 48, 49 и 50; прочие, включая LTS-ветку 24.x, поддержка которой завершилась 20 августа 2026 года, исправлений не получили.
Поскольку Wasmtime встраивается в другие программы как библиотека, обновления командной утилиты недостаточно — каждую программу нужно пересобрать с исправленной версией. Обходных путей бюллетени не предлагают. Инструмент Spin для serverless-приложений перешёл на Wasmtime 50.0.0 в версии 4.2.4 21 октября.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.