Феникс с подбитым крылом
Критическая уязвимость в библиотеке Node.js vm2, отслеживаемая как CVE-2026-22709, позволяет выходить за пределы безопасной среды («песочницы») и выполнить произвольный код в базовой хост-системе.
Опенсорсная библиотека vm2 позволяет создавать безопасный контекст для выполнения, в том числе, ненадежного кода JavaScript, для которого не предполагается доступа к файловой системе.
Исторически библиотека vm2 использовалась в первую очередь на SaaS-платформах, поддерживающих выполнение пользовательских скриптов, в онлайн-компиляторах кода, в чат-ботах и многочисленных проектах с открытым исходным кодом.
Всего vm2 применялась более чем в 200 000 проектов на одном только GitHub.
Но в 2023 году, из-за постоянно выявляемых уязвимостей, позволявших выходить за пределы изолированной среды, библиотека была признана небезопасной для выполнения ненадежного кода. Фактически на этом проект был приостановлен.
Однако в октябре 2025 года сопроводитель проекта Патрик Шимек (Patrik ?imek) решил возродить vm2. Он выпустил версию 3.10.0, которая устранила все известные на тот момент уязвимости, но сохраняла совместимость «со всеми версиями Node 6».
Библиотека продолжает пользоваться большой популярностью на платформе npm: каждую неделю в течение последнего года её, по утверждению издания BleepingComputer, загружали до миллиона раз каждую неделю.
Санитарная недообработка
Нововыявленная уязвимость связана с тем, что vm2 не может должным образом изолировать Promises - компонент, обрабатывающий асинхронные операции и обеспечивающий выполнение кода исключительно контекстом «песочницы».
Хотя vm2 выполняет проверку корректности обратных вызовов собственной внутренней реализации Promise, асинхронные функции возвращают глобальный Promise, коллбэки которого - .then() и .catch() - не проходят надлежащую проверку корректности.
Как следствие, злоумышленники могут обеспечить себе выход за пределы песочницы и выполнить произвольный код на уровне подлежащей системы.
По словам разработчика, уязвимость CVE-2026-22709, позволяющая обойти песочницу, была частично устранена в версии vm2 3.10.1. В последующем обновлении - 3.10.2 - разработчик усилил контрмеры против обхода ограничений изолированной среды.
Разработчик также опубликовал код, демонстрирующим, как можно активировать уязвимость CVE-2026-22709 в «песочнице» vm2, чтобы обойти её и выполнить команду в хост-системе.
Учитывая, простоту эксплуатации пользователям рекомендуется как можно скорее обновиться до последней версии - 3.10.3.
«Колоссальная популярность библиотеки может показаться нелогичной, учитывая все известные в прошлом уязвимости, - отмечает Михаил Зайцев, эксперт по информационной безопасности компании SEQ. - Однако тут в силу вступает принцип «старый друг лучше новых двух»: разработчики, привыкшие использовать именно её, вряд ли захотят переходить на что-то новое и незнакомое. Это означает, что на информацию об уязвимостях в vm2 необходимо обращать внимание в приоритетном порядке».
BleepingComputer упоминает ещё три уязвимости в vm2, которые позволяли обходить песочницу, но все они датированы 2022-2023 годами, и сейчас уже не должны влиять на безопасность библиотеки.



