Добавить в корзинуПозвонить
Найти в Дзене
DigiNews

Критическая уязвимость в популярной библиотеке для изолированной среды vm2 ставит под удар проекты на Node.js

Критическая уязвимость с возможностью побега из песочницы исправлена в библиотеке vm2 для Node.js, используемой для выполнения недоверенного кода. Несмотря на прекращение поддержки, проект был возрожден. Пользователям рекомендуется срочное обновление до версии 3.10.2 из-за бага CVE-2026-22709. Устранена критическая уязвимость в vm2 — широко используемой библиотеке для среды выполнения Node.js JavaScript, которая позволяет выполнять недоверенный код внутри изолированной среды (песочницы) в том же процессе, что и доверенный код приложения. Эта недоработка позволяет осуществить «побег из песочницы» (sandbox escape), что является максимально серьёзной проблемой для компонента, чья основная задача — обеспечить границу безопасности между доверенным и недоверенным кодом. Библиотека vm2, которая указана как зависимость почти в 900 других пакетах в NPM и многих проектах на GitHub, не новичок в уязвимостях типа «побег из песочницы». Фактически, в июле 2023 года её создатель решил прекратить подд

Критическая уязвимость с возможностью побега из песочницы исправлена в библиотеке vm2 для Node.js, используемой для выполнения недоверенного кода. Несмотря на прекращение поддержки, проект был возрожден. Пользователям рекомендуется срочное обновление до версии 3.10.2 из-за бага CVE-2026-22709.

Устранена критическая уязвимость в vm2 — широко используемой библиотеке для среды выполнения Node.js JavaScript, которая позволяет выполнять недоверенный код внутри изолированной среды (песочницы) в том же процессе, что и доверенный код приложения. Эта недоработка позволяет осуществить «побег из песочницы» (sandbox escape), что является максимально серьёзной проблемой для компонента, чья основная задача — обеспечить границу безопасности между доверенным и недоверенным кодом.

Библиотека vm2, которая указана как зависимость почти в 900 других пакетах в NPM и многих проектах на GitHub, не новичок в уязвимостях типа «побег из песочницы». Фактически, в июле 2023 года её создатель решил прекратить поддержку проекта и вывести его из эксплуатации после обнаружения одной из таких уязвимостей.

Несмотря на то что проект остался без поддержки, в отсутствие хороших альтернатив пользователи продолжали его использовать, что приводило к миллионам загрузок ежемесячно. В октябре 2025 года первоначальный мейнтейнер принял решение возродить проект после исправления всех прошлых уязвимостей и анонсировал планы по его переписыванию на TypeScript.

Новая уязвимость, исправленная на этой неделе, отслеживается под кодом CVE-2026-22709 и затрагивает версии старше 3.10.2. Пользователям настоятельно рекомендуется как можно скорее обновиться до последней версии.

«В vm2 версии 3.10.0 можно обойти санитайзинг колбэков для Promise.prototype.then и Promise.prototype.catch», — говорится в официальном уведомлении. «Это позволяет злоумышленникам сбежать из песочницы и выполнить произвольный код».

Изоляция кода — игра в кошки-мышки

Песочницы, подобные vm2, необходимы веб-приложениям и другим приложениям на Node, функциональность которых позволяет пользователям или инструментам загружать и выполнять скрипты. Поскольку код, контролируемый пользователем, по своей природе недоверенный, его нельзя запускать в том же контексте, что и само приложение. Однако хостовое приложение должно отслеживать и видеть, что делает этот код.

Библиотека vm2 достигает этого с помощью сложной сети прокси-серверов, которые перехватывают и опосредуют взаимодействия между песочницей и хостовой средой. Но сложность JavaScript такова, что, вероятно, всегда найдется способ обмануть эту цепочку прокси.

Проект честно заявляет об этом в своем описании: «Объекты могут быть доступны через цепочки прототипов, конструкторы могут быть достигнуты через объекты ошибок, символы предоставляют хуки протокола, а асинхронное выполнение создает временные окна. Огромное количество способов перемещения от одного объекта к другому в JavaScript делает создание герметичной внутрипроцессной песочницы чрезвычайно сложной задачей».

Мейнтейнер прямо предупреждает, что в будущем, вероятно, будут обнаружены новые способы обхода, и хотя они будут исправлены, игра в кошки-мышки продолжится. В своем объявлении о возрождении проекта в октябре он выразил надежду, что выявление уязвимостей с помощью ИИ поможет обнаруживать больше подобных проблем в будущем.

Существуют и другие альтернативы для изоляции кода, которые предоставляют более строгие гарантии безопасности, такие как полная изоляция процессов (full process sandboxing), виртуальные машины, контейнеры и многое другое. Но они сопряжены с большими накладными расходами на производительность или добавляют иные сложности и препятствия. Не говоря уже о том, что эти подходы также не лишены уязвимостей.

Мейнтейнер советует использовать vm2 только в следующих случаях:

  • Если вам нужна тесная интеграция с хостовыми объектами и быстрая синхронная связь
  • Если недоверенный код поступает из относительно доверенного источника (например, внутренние инструменты, системы плагинов с проверенными авторами)
  • Если вы комбинируете vm2 с другими уровнями безопасности (сетевая изоляция, ограничения файловой системы, лимиты ресурсов)
  • Если вы принимаете риск и активно отслеживаете обновления безопасности

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

Автор – Lucian Constantin

Оригинал статьи