Критическая уязвимость 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)

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

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

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

Поддельные пакеты Python на PyPI доставляли RAT

Анализ вредоносной кампании, в которой поддельные Python-пакеты на PyPI маскировались под инструменты проверки орфографии, а на самом деле устанавливали удалённый троян. Раскрыты механизмы сокрытия, действия трояна и рекомендации по защите.

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

Два расширения Chrome похищали переписки ChatGPT и DeepSeek почти у миллиона пользователей

Статья рассказывает о двух вредоносных расширениях Chrome, которые тайно похищали переписки из ChatGPT и DeepSeek, а также другие данные браузера у почти миллиона пользователей.