Критическая уязвимость в библиотеке vm2 позволяет злоумышленникам захватывать системы

vulnerability

В популярной библиотеке для изоляции кода vm2 обнаружена критическая уязвимость (CVE-2026-22709), позволяющая полностью обходить защиту песочницы (sandbox). Злоумышленники могут выполнять произвольный код с привилегиями всей системы. Угроза затрагивает более 273 000 проектов на платформе npm, использующих уязвимые версии библиотеки ≤ 3.10.0.

Детали уязвимости

Библиотека vm2 предназначена для безопасного запуска ненадежного кода в изолированной среде на JavaScript и Node.js. Её часто применяют в плагинах, системах шаблонов и инструментах для анализа безопасности. Однако фундаментальная гарантия изоляции была нарушена. Уязвимость получила максимально возможный балл 9.8 по шкале CVSS, что классифицирует её как критическую. Это означает высокую простоту эксплуатации и катастрофические последствия.

Исследователь Патрик Симек (patriksimek) выявил, что проблема кроется в неправильной санитизации (очистке) функций обратного вызова (callback) для объекта Promise. Конкретно, асинхронные функции возвращают объект глобального Promise (globalPromise), чьи методы .then не проходили проверки, предусмотренные для локальных Promise. Создав объект ошибки (Error) со специальным свойством Symbol, злоумышленник может вызвать асинхронную функцию и получить доступ к неочищенному методу .then.

Этот доступ служит трамплином для обхода песочницы. В результате злоумышленник получает возможность манипулировать прототипом функции (Function prototype) конструктора Error. Следующим шагом становится создание и выполнение произвольного кода. На практике это позволяет, например, вызывать модуль child_process для выполнения системных команд без каких-либо ограничений. Следовательно, вредоносная полезная нагрузка может привести к полному контролю над системой.

Особую опасность уязвимости придаёт её тривиальная эксплуатация. Для атаки не требуется аутентификация, взаимодействие с пользователем или повышенные привилегии. Вредоносный код может быть выполнен удалённо. Таким образом, риску полной компрометации подвержены любые приложения, которые используют vm2 для обработки непроверенного ввода.

Разработчики библиотеки оперативно отреагировали на угрозу. Выпущена исправленная версия 3.10.2. Патч обеспечивает корректную санитизацию обратных вызовов для глобального Promise, что разрывает цепочку эксплуатации. Эксперты единодушны в рекомендациях. Необходимо немедленно обновить библиотеку vm2 до версии 3.10.2 или новее. Альтернативных способов устранения или эффективных временных решений не существует. Пропуск обновления оставляет систему открытой для атаки.

Для команд обеспечения безопасности (SOC) этот инцидент служит напоминанием о важности своевременного обновления зависимостей. Поскольку библиотека широко распространена, волна попыток эксплуатации уязвимости весьма вероятна. Рекомендуется провести инвентаризацию проектов на наличие уязвимой версии vm2. Кроме того, стоит проанализировать логи на предмет подозрительной активности, связанной с выполнением процессов через Node.js. Мониторинг на основе тактик MITRE ATT&CK, таких как выполнение команд (Command and Scripting Interpreter), может помочь в обнаружении инцидентов.

В долгосрочной перспективе инцидент ставит вопрос надёжности изоляции кода в JavaScript. Уязвимости, приводящие к побегу из песочницы (sandbox escape), особенно опасны, так как сводят на нет всю концепцию безопасности. Разработчикам подобных библиотек необходимо усиливать механизмы изоляции, например, применяя многоуровневый подход. В свою очередь, архитекторам приложений стоит рассмотреть дополнительные меры контроля, такие как запуск процессов с минимальными привилегиями в контейнеризованных средах.

Ссылки

Комментарии: 0