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

Критическая уязвимость CVE-2026-22709 в vm2: sandbox побег и риски Node.js

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

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

    Понимание этой проблемы поможет разработчикам timely обновить зависимости и защитить серверы от атак. Мы разберем механизм уязвимости, примеры эксплуатации и пути минимизации рисков. Это позволит избежать компрометации систем в экосистеме Node.js.

    Что такое vm2 и почему sandbox важен

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

    Уязвимость CVE-2026-22709 (CVSS 9.8-10.0) выявлена в версии 3.10.0 и позволяет полностью обходить эти ограничения. Атакующий внутри sandbox может перехватить вызовы Promise и получить доступ к конструктору Error хоста, что приводит к выполнению любого кода вне изоляции. Это не первая такая проблема - vm2 уже страдала от похожих escape’ов, как CVE-2021-23555 или CVE-2023-37466, но эта особенно опасна из-за простоты эксплуатации.

    Проблема кроется в неполной санитизации колбэков Promise.prototype.then и Promise.prototype.catch. Async-функции возвращают globalPromise, чьи обработчики не проходят полную проверку, в отличие от localPromise. Это открывает дверь для инъекции через переопределение Function.prototype.call.

    Вот ключевые шаги эксплуатации:

    • Создать async-функцию, возвращающую globalPromise с ошибкой.
    • Прикрепить .catch() и перехватить вызов через прототип Function.
    • Обойти ensureThis() для доступа к несанитизированному Error.
    • Выполнить код, например, запуск child_process.execSync.

    Механизм уязвимости в деталях

    В lib/setup-sandbox.js санитизируется localPromise.prototype.then, но globalPromise остается уязвимым. Атакующий создает ошибку с Symbol() в name, генерирует async-функцию и ловит ошибку в .catch(). Перехват call позволяет пропустить проверки и добраться до Function конструктора хоста.

    Это приводит к RCE - arbitrary code execution. Пример PoC показывает, как echo ‘HELLO WORLD’ выполняется вне sandbox через child_process. CVSS вектор AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H подчеркивает сетевую доступность без аутентификации и полное нарушение конфиденциальности, целостности и доступности.

    Уязвимость опубликована 26 января 2026 в GitHub Security Advisory. Фикс в коммите 4b009c2d4b1131c01810c1205e641d614c322a29 вышел в 3.10.2, но рекомендуется 3.10.3 для дополнительных патчей.

    Основные векторы атаки:

    • Запуск пользовательского кода в sandbox (run() метод).
    • Нюанс: требуется доступ к sandbox, но это типично для eval-подобных сценариев.
    • Переопределение прототипов для байпаса санитизации.
    • Доступ к process.mainModule для системных вызовов.
    Версия vm2 Статус CVSS Фикс
    ≤3.10.1 Уязвима 9.8-10 -
    3.10.2 Исправлена - Коммит 4b009c2
    3.10.3 Рекомендуется - Доп. патчи

    Риски для Node.js экосистемы

    vm2 используется в тысячах проектов для безопасного eval, плагинов или серверлесс-выполнения. Уязвимость угрожает backend-серверам, где sandbox защищает от инъекций в динамическом контенте. Атака не требует привилегий - достаточно отправить вредоносный скрипт.

    В экосистеме Node.js это усиливает цепочку атак: от клиентского кода к серверному RCE. Прошлые уязвимости vm2 показывают паттерн - разработчики полагались на библиотеку, но повторные escape’ы подрывают доверие. Затронуты npm-пакеты, GitLab CI, облачные платформы с Node.js.

    Масштаб велик: EPSS 0.00059 указывает на низкую вероятность, но критичность делает ее приоритетной. Организации с dependency scanning (GitLab, Endor Labs) уже фиксируют ее.

    Последствия эксплуатации:

    • Полный контроль над сервером.
    • Особенность: утечка ключей, данных через Error.stack.
    • Масштабные компрометации в цепочках поставок.
    • Необходимость аудита всех sandbox-использований.

    Как защититься и альтернативы

    Обновление до 3.10.3 - основной шаг. Проверьте package.json на vm2 ≤3.10.1 с npm audit или Snyk. Если sandbox критичен, рассмотрите миграцию на альтернативы вроде isolated-vm или ses (Secure EcmaScript).

    Изолируйте vm2 в контейнере или используйте worker_threads с ограничениями. Регулярный dependency scanning предотвратит будущие инциденты. Тестируйте свой код на PoC - убедитесь, что escape невозможен.

    Альтернатива Преимущества Недостатки
    isolated-vm V8 изоляция Сложнее настройка
    ses Стандартный JS Меньше фич
    worker_threads Встроенный Не полный sandbox

    Уязвимости на подходе

    CVE-2026-22709 напоминает о хрупкости sandbox в JS. Фиксы помогают, но история vm2 полна дыр - от 2021 до 2026. Разработчики Node.js должны пересмотреть подходы к изоляции, особенно с ростом AI-генерируемого кода.

    Остается открытым вопрос надежности популярных библиотек. Следите за обновлениями в NVD и GitHub Advisories - новые паттерны escape могут появиться в похожих инструментах.

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

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

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

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

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

    Категории

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

    Контакты

    • Сотрудничество
    • info@exlends.com

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

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

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

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