Песочница оказалась дырявым ведром. Очередной способ взломать Node.js уже гуляет по сети
Исправить положение дел быстро не выйдет, и на это есть причины.
Критическая уязвимость в популярной библиотеке vm2 для Node.js поставила под угрозу сервисы, которые запускают чужой JavaScript-код в изолированной среде. Ошибка позволяет выйти за пределы песочницы и получить выполнение команд уже на самой системе. На фоне миллионов загрузок библиотеки через npm проблема затрагивает не только небольшие проекты, но и крупные SaaS-платформы, онлайн-компиляторы и инструменты автоматизации.
Проблему зарегистрировали под идентификатором CVE-2026-26956. Авторы уведомления подтвердили наличие бреши в версии vm2 3.10.4, хотя предыдущие выпуски тоже могут оказаться уязвимыми. Для ошибки уже появился публичный PoC-код, демонстрирующий удалённое выполнение команд на хосте.
Библиотеку vm2 используют для запуска недоверенного JavaScript-кода в изолированной среде Node.js. Её назначение — ограничить доступ к системным функциям, включая объект process и файловую систему. Однако новая ошибка нарушает сам принцип изоляции.
Причина связана с обработкой исключений между песочницей и основной средой выполнения. В обычных условиях vm2 полагается на механизмы защиты JavaScript и специальные Proxy-объекты, которые фильтруют взаимодействие между окружениями. Однако поддержка обработки исключений WebAssembly позволяет перехватывать ошибки на более низком уровне движка V8, обходя защитные механизмы библиотеки.
Атака строится вокруг специально подготовленного TypeError во время преобразования Symbol в строку. В результате объект ошибки из основной среды попадает обратно в песочницу без необходимой очистки. Поскольку объект создан уже вне sandbox-окружения, злоумышленник может через цепочку конструкторов восстановить доступ к внутренним возможностям Node.js и запустить произвольные команды на системе.
Разработчик vm2 уточнил, что проблема подтверждена для Node.js 25.6.1 при включённой поддержке обработки исключений WebAssembly и JSTag. Пользователям рекомендовали как можно быстрее перейти минимум на vm2 3.10.5, а актуальной версией сейчас считается 3.11.2.
Для vm2 подобные инциденты уже стали регулярными. В начале 2026 года библиотека получила ещё одну критическую уязвимость с выходом из песочницы — CVE-2026-22709. До этого аналогичные ошибки фиксировали в 2023 и 2022 годах. Серия подобных случаев показывает, насколько сложно надёжно изолировать удалённое выполнение кода даже в популярных инструментах.