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

CVE-2026-22709: критическая уязвимость vm2 для выполнения кода на хосте

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

    Обложка: CVE-2026-22709: критическая уязвимость vm2 позволяет выполнить код на хост-системе

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

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

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

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

    Однако в версиях до 3.10.2 обнаружен баг, который делает изоляцию бесполезной. Уязвимость получила оценку 9.8 по CVSS - максимум для критических угроз. Она эксплуатируется удаленно без аутентификации, что делает ее опасной для серверов с пользовательским вводом. На npm более 273 тысяч проектов зависят от уязвимых версий, включая популярные фреймворки.

    Вот ключевые аспекты механизма vm2:

    • Локальные Promise: Санитизируются в setup-sandbox.js для then и catch.
    • Глобальные Promise: Не обрабатываются, что открывает лазейку через async-функции.
    • Последствия: Доступ к Function.prototype и child_process для системных команд.
    Аспект Описание Риск
    Sandbox цель Изоляция JS-кода Полный обход
    Эксплуатация Async + globalPromise Удаленная, без привилегий
    Затронутые vm2 ≤ 3.10.1 273k+ проектов

    Как работает уязвимость CVE-2026-22709

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

    Далее идет цепочка: перехват Function.prototype.call, доступ к прототипу Error, манипуляция с ним и запуск кода на хосте. Это напоминает старую уязвимость CVE-2021-23555, но с новым вектором через Promise. Разработчики vm2 выпустили фикс в 3.10.2, усилив защиту, а в 3.10.3 добавили дополнительные меры.

    Этапы эксплуатации:

    1. Вставка async-функции в sandbox-код.
    2. Обход санитизации через globalPromise.then.
    3. Получение доступа к хост-объектам и выполнение child_process.exec.

    Важный нюанс: Уязвимость тривиальна - не нужны права или взаимодействие с пользователем. Таблица ниже показывает вектор атаки.

    Шаг Техника Результат
    1 Async return globalPromise Обход local санитизации
    2 Then/catch callback Доступ к прототипу
    3 Error constructor RCE на хосте
    4 Child_process Системные команды

    Затронутые версии и статистика

    Все версии vm2 ниже 3.10.2 уязвимы, включая 3.10.0 и 3.10.1, где фикс был частичным. GitHub Security Advisory подтверждает: обновление до 3.10.2 обязательно. Более широкие оценки говорят о риске для всех релизов до этой версии, даже если некоторые источники указывают ≤3.10.0.

    На практике это значит проверку package.json в проектах. Библиотека входит в цепочки зависимостей многих инструментов: от серверов до браузерных песочниц. Разработчик опубликовал PoC-код, демонстрирующий выполнение команд вроде ‘ls’ или ‘whoami’ прямо из sandbox.

    Ключевые факты:

    • CVSS вектор: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
    • Дата раскрытия: Январь 2026, фикс в коммите 4b009c2.
    • Рекомендация: Обновить до 3.10.3 для полной защиты.
    Версия Статус Действие
    ≤3.10.1 Уязвима Немедленно обновить
    3.10.2 Фикс Минимально безопасна
    3.10.3+ Полная защита Использовать

    Меры защиты и миграция

    Сначала обновите vm2 через npm update vm2@latest. Просканируйте зависимости инструментами вроде npm audit или Snyk. Если проект критический, временно отключите обработку пользовательского JS или добавьте дополнительный слой изоляции, например, Docker-контейнеры.

    Дальше протестируйте на PoC: запустите демо-код в вашей среде, чтобы убедиться в отсутствии уязвимости. Для новых проектов рассмотрите альтернативы вроде isolated-vm или ses - они тоже для sandbox в Node.js, но с другими плюсами.

    Шаги по защите:

    • Аудит: npm ls vm2.
    • Обновление: npm i vm2@3.10.3.
    • Мониторинг: Настройте alerts на GitHub Advisories.
    • Альтернативы: Переход на isolated-vm для строгой изоляции.

    Не забывайте: Регулярные обновления - ключ к безопасности в экосистеме Node.js.

    Глубже в экосистему Node.js

    Эта уязвимость подчеркивает риски популярных библиотек: vm2 казалась надежной, но баг в Promise сломал все. Остается открытым вопрос, сколько цепных атак уже произошло незаметно. Стоит присмотреться к другим sandbox-решениям и усилить валидацию ввода.

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

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

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

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

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

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

    Категории

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

    Контакты

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

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

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

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

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