В популярной библиотеке vm2, которая используется в экосистеме Node.js для безопасного выполнения непроверенного JavaScript-кода, обнаружена критическая уязвимость, позволяющая злоумышленникам обойти защитную песочницу (sandbox) и выполнить произвольный код на хост-системе.
Проблема получила идентификатор CVE-2026-22709 и оценку 9.8 из 10 по шкале CVSS, что отражает её высокую опасность: уязвимость может быть использована удалённо, без участия пользователя и без прав доступа, чтобы полностью скомпрометировать систему.
Что такое vm2 и почему уязвимость важна
Библиотека vm2 широко применяется разработчиками Node.js, когда нужно запускать чужой или непроверенный JavaScript-код в изолированной среде. Например, в SaaS-платформах, редакторах кода онлайн, чат-ботах или средах исполнения плагинов. vm2 создаёт изолированную песочницу, перехватывая и проксируя объекты, чтобы запретить доступ внутреннего кода к хост-окружению.
Однако ошибка в механизме обработки Promise (асинхронных операций JavaScript) подрывает эту изоляцию. Библиотека корректно фильтрует обратные вызовы (.then/.catch) для собственных объектов localPromise, но не делает этого для глобальных Promise, которые возвращают асинхронные функции. Злоумышленник может воспользоваться этой разницей и заставить код выполнить команды за пределами песочницы.
Как работает уязвимость
Асинхронные функции в JavaScript возвращают глобальные
Promise-объекты, а не локальные объекты, созданные vm2.vm2 не фильтрует (
sanitize) обработчики (callback) для глобальныхPromise.prototype.thenиPromise.prototype.catch.Это позволяет злоумышленному коду в песочнице получить доступ к функциональности, выходящей за пределы изоляции, и выполнить произвольный код на хосте.
Что уже сделано и что теперь
Уязвимость затрагивает vm2 версии до 3.10.1 включительно. Разработчики библиотеки уже выпустили исправления: в версиях 3.10.2 и 3.10.3 уязвимость устранена.
Авторам vm2 пришлось неоднократно исправлять подобные проблемы в прошлом: в последние годы были обнаружены и устранены несколько уязвимостей, позволяющих выходить из песочницы (например, CVE-2023-29017, CVE-2023-29199 и другие). На какое-то время проект даже объявляли о прекращении поддержки, но к концу 2025 года его снова стали поддерживать.
Поддерживающий разработчик также отметил, что в будущем могут появиться новые способы обхода ограничений vm2, поэтому важно не только обновляться, но и рассматривать более устойчивые альтернативы, такие как isolated-vm, которая использует интерфейсы изоляции V8 на низком уровне, обеспечивая более надёжную изоляцию.
Рекомендации для разработчиков и администраторов
Срочно обновите все проекты, где используется vm2, до версии 3.10.3 или новее.
Если обновление невозможно, ограничьте ввод непроверенного кода и пересмотрите архитектуру решения.
Рассмотрите альтернативы vm2 с более строгими гарантиями изоляции, например, isolated-vm или контейнерные/виртуальные окружения с аппаратной поддержкой.
Проверьте журналы на предмет подозрительной активности, особенно если ваше приложение позволяет выполнение стороннего JavaScript-кода.
Источник: HN