Май 2026 года стал настоящим испытанием для разработчиков, использующих среду выполнения Node.js. Сразу четыре уязвимости, получившие наивысшие оценки опасности по международной шкале CVSS, были выявлены в популярной библиотеке vm2. Этот компонент предназначен для изоляции ненадёжного кода, но сам оказался источником риска.
Детали уязвимостей
Начнём с главного: все четыре проблемы затрагивают версии библиотеки vm2 до 3.11.0 включительно. Производитель, Node.js Foundation, уже выпустил обновление до версии 3.11.0, которое устраняет все перечисленные бреши. Однако ключевая тревожная деталь в другом: для каждой из этих уязвимостей уже существуют эксплуатирующие программы в открытом доступе. Это означает, что любой злоумышленник может воспользоваться готовым инструментом для атаки на системы, где используется старая версия библиотеки.
Теперь разберёмся, в чём именно заключается опасность. Библиотека vm2 представляет собой реализацию "песочницы" - изолированной среды для выполнения стороннего кода на языке JavaScript. Её часто применяют в облачных сервисах, инструментах для разработчиков, системах веб-аналитики и даже в некоторых криптовалютных кошельках. Идея в том, чтобы пользовательский скрипт не мог получить доступ к операционной системе или данным за пределами выделенной ему области. Но найденные уязвимости позволяют обойти этот защитный барьер.
Первая уязвимость (идентификатор BDU:2026-06906, CVE-2026-43997) связана с неверным управлением генерацией кода. Простыми словами, из-за ошибки в механизме обработки JavaScript-выражений злоумышленник может отправить специально подготовленную строку, которая заставит "песочницу" выполнить произвольный код на уровне хостовой системы. Оценка CVSS 3.1 - максимальные 10 баллов. Это означает, что для атаки не требуется ни аутентификация, ни взаимодействие с пользователем.
Вторая уязвимость (BDU:2026-06907, CVE-2026-44006) затрагивает функцию BaseHandler.getPrototypeOf(). Она также относится к категории неверного управления генерацией кода. Суть та же: удалённый нарушитель может с помощью инъекции кода вырваться за пределы изолированной среды. Оценка также 10 баллов - критический уровень опасности.
Третья уязвимость (BDU:2026-06908, CVE-2026-43999) отличается по типу ошибки: здесь проблема кроется в неправильной авторизации. А именно, функция Module._load() не проверяет должным образом права доступа при загрузке модулей. Это позволяет атакующему, уже имеющему ограниченный доступ внутри "песочницы", выполнить произвольный код на сервере. Оценка CVSS 3.1 - 9,9 балла. Хотя вектор атаки требует наличия учётной записи внутри изолированной среды, последствия всё равно катастрофические.
И наконец, четвёртая уязвимость (BDU:2026-06914, CVE-2026-44005), отличается от предыдущих. Она связана с неконтролируемым изменением атрибутов прототипа объекта (так называемая атака prototype pollution). Это означает, что злоумышленник может манипулировать свойствами базового объекта JavaScript, что в конечном итоге приводит к искажению логики работы "песочницы" и её обхода. Оценка CVSS 3.1 - 10 баллов. Примечательно, что данная уязвимость затрагивает версии библиотеки начиная с 3.9.6, то есть более старые сборки тоже уязвимы.
Библиотека vm2 используется в тысячах пакетов в реестре NPM. По данным открытых источников, её ежемесячно загружают более 10 миллионов раз. И хотя обновление уже вышло, процесс обновления зависимостей в крупных проектах может затянуться на недели и даже месяцы. В зоне риска прежде всего те сервисы, которые принимают JavaScript-код от пользователей и выполняют его в изолированной среде. Например, облачные IDE, сервисы для выполнения кода "на лету", инструменты для тестирования безопасности, платформы для создания ботов.
Следует понимать, что выполнение произвольного кода на сервере даёт злоумышленнику практически неограниченные возможности. Он может украсть данные, установить программы-вымогатели, использовать сервер для рассылки спама или как часть ботнета. Всё зависит от целей атакующего.
Разработчикам, использующим vm2, настоятельно рекомендуется как можно скорее обновить библиотеку до версии 3.11.0. Если по каким-то причинам немедленное обновление невозможно, стоит хотя бы временно отключить функциональность, связанную с приёмом внешнего JavaScript-кода, или перейти на альтернативные решения для изоляции, например, на изолированные контейнеры Docker.
Хорошая новость в том, что уязвимости уже устранены производителем. Плохая - эксплойты находятся в открытом доступе, и атаки начались практически сразу после публикации информации. Специалистам по информационной безопасности стоит проверить, не используются ли в их инфраструктуре версии vm2 старше 3.11.0, и принять меры до того, как это сделают злоумышленники. Остаётся надеяться, что большинство разработчиков успеют закрыть эти бреши до того, как они приведут к серьёзным последствиям.
Ссылки
- https://bdu.fstec.ru/vul/2026-06906
- https://bdu.fstec.ru/vul/2026-06907
- https://bdu.fstec.ru/vul/2026-06908
- https://bdu.fstec.ru/vul/2026-06914
- https://www.cve.org/CVERecord?id=CVE-2026-43997
- https://www.cve.org/CVERecord?id=CVE-2026-44006
- https://www.cve.org/CVERecord?id=CVE-2026-43999
- https://www.cve.org/CVERecord?id=CVE-2026-44005
- https://github.com/patriksimek/vm2/security/advisories/GHSA-47x8-96vw-5wg6
- https://github.com/patriksimek/vm2/security/advisories/GHSA-qcp4-v2jj-fjx8
- https://thehackernews.com/2026/05/vm2-nodejs-library-vulnerabilities.html
- https://github.com/patriksimek/vm2/security/advisories/GHSA-947f-4v7f-x2v8
- https://github.com/patriksimek/vm2/security/advisories/GHSA-vwrp-x96c-mhwq