Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Уязвимость CVE-2026-22709 в vm2: побег из Node.js sandbox и защита приложений

Уязвимость CVE-2026-22709 в vm2: побег из Node.js sandbox и защита приложений

Запланировано Прикреплена Закрыта Перенесена JavaScript
cve-2026-22709vm2sandbox escape
1 Сообщения 1 Постеры 1 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    Уязвимость CVE-2026-22709 в библиотеке vm2 позволяет вырваться из песочницы Node.js и запустить произвольный код на хосте. Это критическая проблема для всех, кто использует vm2 для изоляции ненадежного кода. В статье разберем, как она работает, и как защитить свои приложения.

    Если вы разрабатываете серверы или плагины, где пользователи загружают скрипты, такая дыра может привести к компрометации сервера. Мы пройдемся по технике атаки, затронутым версиям и шагам по фиксу. Это поможет избежать потерь и быстро обновить код.

    Что такое vm2 и почему она популярна

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

    Проблема в том, что vm2 уже не раз подводила: были CVE-2022-36067, CVE-2023-29017 и другие. Новая уязвимость CVE-2026-22709 с CVSS 9.8 - это побег через Promise. Атакующий обходит санитизацию колбэков в Promise.prototype.then и .catch, используя несанитизированный globalPromise от асинхронных функций.

    Это приводит к RCE - remote code execution на хосте. Представьте: пользовательский скрипт крадет данные или запускает reverse shell. Разработчики vm2 исправили в 3.10.1 частично, а в 3.10.2 - полностью, но риски остаются.

    Вот ключевые аспекты уязвимости:

    • Байпас санитизации: Колбэк localPromise проверяется, но globalPromise - нет.
    • Proxy-ловушка: Атакующий создает вредоносный Proxy, перехватывающий Function.prototype.call.
    • Асинхронный триггер: Promise.reject с payload вызывает утечку через V8-логику.
    Версия vm2 Статус Рекомендация
    <=3.10.0 Уязвима Обновить срочно
    3.10.1 Частично фикс Обновить до 3.10.2+
    3.10.2+ Защищена Мониторить обновления

    Как работает эксплойт CVE-2026-22709

    Эксплойт строится на архитектуре vm2: она оборачивает объекты в Proxy для изоляции. Но в версии 3.10.0 есть щель в lib/setup-sandbox.js. Асинхронная функция возвращает globalPromise, чьи .then/.catch не санитизированы полностью. Атакующий переопределяет call() и выходит за пределы.

    Пример: вредоносный код создает async-функцию, кидает Promise.reject с Proxy. Это активирует стек-трейс V8, где хост-объекты сливаются. Дальше - доступ к Function.constructor и process.mainModule.require(‘child_process’). В реальных атаках это exfiltrate файлов или запуск команд.

    Тестировщики показывают payload: он крадет /etc/shadow или выводит uid=root. vm2 maintainer Patrik Simek подтвердил: это тривиально эксплуатировать. Прошлые CVE тоже шли через Promise или Proxy, так что библиотека системно уязвима.

    Шаги эксплойта в упрощенном виде:

    1. Создать malicious Proxy внутри sandbox.
    2. Вызвать async error с Promise.reject(proxy).
    3. Перехватить call() для доступа к хост-Function.
    4. Выполнить x(‘return process.mainModule.require(“child_process”).execSync(“id”)’)().

    Нюанс: в Node.js 24+ V8 усиливает утечки через async stack.

    Предыдущие CVE в vm2 Тип Фикс
    CVE-2022-36067 Sandbox escape 3.9.10+
    CVE-2023-29017 Promise bypass 3.9.15+
    CVE-2023-30547 Proxy leak 3.9.16+

    Способы защиты от побега из sandbox

    Защита начинается с обновления: перейдите на vm2 3.10.3 или новее. Это закроет CVE-2026-22709 и свежие фиксы. Но vm2 хрупкая - лучше комбинировать с другими мерами. Используйте Docker-контейнеры или isolated-vm для настоящей изоляции.

    Если обновление невозможно, добавьте белый список доступных API. Мониторьте зависимости через npm audit или Snyk. В продакшене запускайте sandbox в отдельных процессах с ограниченными правами - это минимизирует ущерб от RCE.

    Эффективные стратегии:

    • Обновить vm2: npm i vm2@latest - сразу и просто.
    • Альтернативы: isolated-vm (быстрее, безопаснее) или ses (для браузера).
    • Дополнительная изоляция: Docker, Firecracker или AWS Lambda.
    • Аудит кода: Сканируйте на Promise-обходы вручную.

    Важно: даже фикс 3.10.2 не железобетонный - maintainer предупреждает о будущих байпасах.

    Решение Плюсы Минусы
    vm2 3.10.3 Легко мигрировать История уязвимостей
    isolated-vm Лучшая изоляция Требует Node 14+
    Docker Полная виртуализация Оверхед ресурсов

    Когда sandbox не спасет - реальные риски

    CVE-2026-22709 напоминает: ни одна песочница не вечна. vm2 ломалась 7+ раз за годы, и это не конец. Подумайте о сценариях, где ненадежный код - норма: онлайн-IDE, чат-боты с eval или плагины.

    Риски выходят за RCE: утечка ключей, DDoS или цепная атака. Тестируйте на pentest-инструментах вроде node-security. Если проект критический, мигрируйте на альтернативы заранее - это сэкономит нервы позже.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы