Критическая уязвимость vm2 в Node.js

В популярной библиотеке 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

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Кибербезопасность 1 месяц назад

Microsoft закрыла активно эксплуатируемую уязвимость нулевого дня в Office

Microsoft выпустила экстренное обновление безопасности для Microsoft Office, закрывающее уязвимость нулевого дня, которая уже используется в атаках. Обновление устраняет обход механизмов защиты и рекомендуется к установке как можно скорее.

Кибербезопасность 1 месяц назад

Опасные расширения для Chrome крадут данные и доступ к ChatGPT

В январе 2026 года исследователи нашли вредоносные расширения для Chrome, которые под видом полезных инструментов перенаправляют партнерские ссылки, собирают данные и крадут токены доступа к ChatGPT. Пользователям опасно устанавливать непроверенные дополнения.

Кибербезопасность 3 недели назад

Зловредный модуль Go маскируется под популярную криптобиблиотеку и заражает Linux

В экосистеме Go обнаружен вредоносный модуль, маскирующийся под популярную криптобиблиотеку. Он крадёт пароли и устанавливает бэкдор Rekoobe на Linux-системы, создавая угрозу для разработчиков и серверной инфраструктуры.