В isolated-vm закрыли критическую уязвимость с возможностью выхода из песочницы

Ошибка в библиотеке для запуска недоверенного JavaScript могла позволить коду из изолированной среды повредить память процесса-хоста и потенциально выполнить на нём произвольный код. Исправления выпущены в версиях 6.2.0 и 7.0.1.

В isolated-vm закрыли критическую уязвимость с возможностью выхода из песочницы

В популярной Node.js-библиотеке isolated-vm обнаружена критическая уязвимость, позволяющая коду из JavaScript-песочницы выйти за пределы изолированной среды. В худшем сценарии исследователи продемонстрировали перехват управления потоком выполнения процесса-хоста, что создаёт риск удалённого выполнения кода на стороне хоста.

Проблема зарегистрирована под идентификатором GHSA-864f-rcv7-6rh4; CVE-номер ей пока не присвоен. Она затрагивает все версии isolated-vm до 7.0.0 включительно. Разработчики исправили ошибку в выпусках 6.2.0 и 7.0.1, опубликованных в августе.

isolated-vm применяется для запуска недоверенного JavaScript в отдельных экземплярах движка V8. Для передачи данных между основным процессом Node.js и гостевой изолированной средой библиотека использует механизм ExternalCopy. Именно в нём исследователь Endor Labs Кристиан-Александру Стайку обнаружил ошибку смешения типов при обработке параметра transferList.

По данным исследователя, уязвимость позволяет коду в песочнице повредить память процесса-хоста. Минимальным продемонстрированным последствием назван контролируемый сбой процесса с SIGSEGV; для атаки гостевому коду требуется переданный хостом объект ivm.Reference. Разработчик проекта Марсель Лаверде сообщил, что максимальный показанный эффект — перехват управления потоком выполнения хост-процесса, то есть потенциальное выполнение кода.

Исследователи отдельно уточнили, что граница изоляции самого V8 не была нарушена: ошибка находится в C++-слое библиотеки, который переносит значения между изолятами. Технические детали полноценной эксплуатации не раскрываются, чтобы не упростить атаки.

Пользователям isolated-vm рекомендуется обновить зависимость до актуальной исправленной версии. По данным The Hacker News, за последнюю неделю пакет npm был скачан почти 1 млн раз.